diff --git a/api/docs/docs.go b/api/docs/docs.go index 72bdf33cf..1bfb6d78e 100644 --- a/api/docs/docs.go +++ b/api/docs/docs.go @@ -2221,6 +2221,26 @@ const docTemplate = `{ }, }, }, + "/teachers/fundRegistered/{year}": { + "get": { + tags: ["teacher"], + "description": "募金登録済みのteacherのidを取得", + "parameters": [ + { + "name": "year", + "in": "path", + "description": "year", + "required": true, + "type": "integer" + } + ], + "responses": { + "200": { + "description": "募金登録済みのteacherのidを取得", + } + } + }, + }, "/users": { "get": { tags: ["user"], @@ -2549,7 +2569,6 @@ const docTemplate = `{ "feature":{ "type": "string", "example": "なし", - }, "expense":{ "type": "int", diff --git a/api/externals/controller/teacher_controller.go b/api/externals/controller/teacher_controller.go index 03530204c..010375976 100644 --- a/api/externals/controller/teacher_controller.go +++ b/api/externals/controller/teacher_controller.go @@ -14,6 +14,7 @@ type teacherController struct { type TeacherController interface { IndexTeacher(echo.Context) error + IndexFundRegisteredTeacher(echo.Context) error ShowTeacher(echo.Context) error CreateTeacher(echo.Context) error UpdateTeacher(echo.Context) error @@ -34,6 +35,16 @@ func (t *teacherController) IndexTeacher(c echo.Context) error { return c.JSON(http.StatusOK, teachers) } +// IndexFundRegistered +func (t *teacherController) IndexFundRegisteredTeacher(c echo.Context) error { + year := c.Param("year") + fundRegisteredTeachers, err := t.u.GetFundRegisteredByPeriods(c.Request().Context(), year) + if err != nil { + return err + } + return c.JSON(http.StatusOK, fundRegisteredTeachers) +} + // Show func (t *teacherController) ShowTeacher(c echo.Context) error { id := c.Param("id") diff --git a/api/externals/repository/teacher_repository.go b/api/externals/repository/teacher_repository.go index a7ae7a5f0..34159c4ba 100644 --- a/api/externals/repository/teacher_repository.go +++ b/api/externals/repository/teacher_repository.go @@ -16,6 +16,7 @@ type teacherRepository struct { type TeacherRepository interface { All(context.Context) (*sql.Rows, error) + AllFundRegistered(context.Context, string) (*sql.Rows, error) Find(context.Context, string) (*sql.Row, error) Create(context.Context, string, string, string, string, string, string) error Update(context.Context, string, string, string, string, string, string, string) error @@ -33,6 +34,33 @@ func (t *teacherRepository) All(c context.Context) (*sql.Rows, error) { return t.crud.Read(c, query) } +func (t *teacherRepository) AllFundRegistered(c context.Context, year string) (*sql.Rows, error) { + query := ` + SELECT + teachers.id + FROM + teachers + INNER JOIN + fund_informations + ON + teachers.id = fund_informations.teacher_id + INNER JOIN + year_periods + ON + fund_informations.created_at > year_periods.started_at + AND + fund_informations.created_at < year_periods.ended_at + INNER JOIN + years + ON + year_periods.year_id = years.id + WHERE + years.year = ` + year + ` + ORDER BY + fund_informations.created_at ASC;` + return t.crud.Read(c, query) +} + func (t *teacherRepository) Find(c context.Context, id string) (*sql.Row, error) { query := "SELECT * FROM teachers WHERE id = " + id return t.crud.ReadByID(c, query) diff --git a/api/internals/usecase/teacher_usecase.go b/api/internals/usecase/teacher_usecase.go index a9ae346e6..d399a7555 100644 --- a/api/internals/usecase/teacher_usecase.go +++ b/api/internals/usecase/teacher_usecase.go @@ -14,6 +14,7 @@ type teacherUseCase struct { type TeacherUseCase interface { GetTeachers(context.Context) ([]domain.Teacher, error) + GetFundRegisteredByPeriods(context.Context, string) ([]int, error) GetTeacherByID(context.Context, string) (domain.Teacher, error) CreateTeacher(context.Context, string, string, string, string, string, string) (domain.Teacher, error) UpdateTeacher(context.Context, string, string, string, string, string, string, string) (domain.Teacher, error) @@ -60,6 +61,30 @@ func (t *teacherUseCase) GetTeachers(c context.Context) ([]domain.Teacher, error return teachers, nil } +func (t *teacherUseCase) GetFundRegisteredByPeriods(c context.Context, year string) ([]int, error) { + + rows, err := t.rep.AllFundRegistered(c, year) + if err != nil { + return nil, err + } + defer rows.Close() + + ids := []int{} + for rows.Next() { + var id int + if err := rows.Scan(&id); err != nil { + return nil, err + } + ids = append(ids, id) + } + + if err := rows.Err(); err != nil { + return nil, err + } + + return ids, nil +} + func (t *teacherUseCase) GetTeacherByID(c context.Context, id string) (domain.Teacher, error) { var teacher domain.Teacher diff --git a/api/router/router.go b/api/router/router.go index 87ce12658..f47d540c5 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -222,6 +222,7 @@ func (r router) ProvideRouter(e *echo.Echo) { // teacherのRoute e.GET("/teachers", r.teacherController.IndexTeacher) e.GET("/teachers/:id", r.teacherController.ShowTeacher) + e.GET("/teachers/fundRegistered/:year", r.teacherController.IndexFundRegisteredTeacher) e.POST("/teachers", r.teacherController.CreateTeacher) e.PUT("/teachers/:id", r.teacherController.UpdateTeacher) e.DELETE("/teachers/:id", r.teacherController.DestroyTeacher)