Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions api/externals/controller/buy_report_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ type BuyReportController interface {
CreateBuyReport(echo.Context) error
UpdateBuyReport(echo.Context) error
DeleteBuyReport(echo.Context) error
IndexBuyReport(echo.Context) error
UpdateBuyReportStatus(echo.Context) error
}

func NewBuyReportController(u usecase.BuyReportUseCase) BuyReportController {
Expand Down Expand Up @@ -88,4 +90,36 @@ func (s *buyReportController) DeleteBuyReport(c echo.Context) error {
return c.String(http.StatusOK, "buy_report delete success")
}

// Index
func (s *buyReportController) IndexBuyReport(c echo.Context) error {
ctx := c.Request().Context()
year := c.QueryParam("year")

buyReportDetails, err := s.u.GetBuyReports(ctx, year)
if err != nil {
return c.String(http.StatusBadRequest, "failed to buy_reports")
}

return c.JSON(http.StatusOK, buyReportDetails)
}

// UpdateStatus
func (s *buyReportController) UpdateBuyReportStatus(c echo.Context) error {
ctx := c.Request().Context()
buyReportId := c.Param("buy_report_id")
var requestBody BuyReportStatusRequestBody
if err := c.Bind(&requestBody); err != nil {
return c.String(http.StatusBadRequest, "Bad Request")
}

buyReportDetail, err := s.u.UpdateBuyReportStatus(ctx, buyReportId, requestBody)
if err != nil {
return c.String(http.StatusBadRequest, "failed update buy_reports")
}

return c.JSON(http.StatusOK, buyReportDetail)
}

type BuyReport = generated.BuyReport
type BuyReportDetails = []generated.BuyReportDetail
type BuyReportStatusRequestBody = generated.PutBuyReportStatusBuyReportIdJSONRequestBody
77 changes: 77 additions & 0 deletions api/externals/repository/buy_report_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ type BuyReportRepository interface {
GetPaymentReceipt(context.Context, *sql.Tx, string) (*sql.Row, error)
GetBuyReportById(context.Context, string) (*sql.Row, error)
GetYearByBuyReportId(context.Context, *sql.Tx, string) (*sql.Row, error)
AllByPeriod(context.Context, string) (*sql.Rows, error)
GetByBuyReportId(context.Context, string) (*sql.Row, error)
UpdateBuyReportStatus(context.Context, string, PutBuyReport) error
}

func NewBuyReportRepository(c db.Client, ac abstract.Crud) BuyReportRepository {
Expand Down Expand Up @@ -202,4 +205,78 @@ func (brr *buyReportRepository) GetYearByBuyReportId(
return brr.crud.TransactionReadByID(c, tx, query)
}

// 年度に紐づいたdetailsの取得
func (brr *buyReportRepository) AllByPeriod(c context.Context, year string) (*sql.Rows, error) {

ds := selectBuyReportDetailsQuery

if year != "" {
ds = ds.Where(goqu.Ex{"years.year": year})
}

query, _, err := ds.ToSQL()

if err != nil {
return nil, err
}

return brr.crud.Read(c, query)
}

func (brr *buyReportRepository) GetByBuyReportId(c context.Context, buyReportId string) (*sql.Row, error) {

ds := selectBuyReportDetailsQuery.Where(goqu.Ex{"buy_statuses.buy_report_id": buyReportId})

query, _, err := ds.ToSQL()

if err != nil {
return nil, err
}

return brr.crud.ReadByID(c, query)
}

func (brr *buyReportRepository) UpdateBuyReportStatus(c context.Context, buyReportId string, requestBody PutBuyReport) error {

updateDs := dialect.Update("buy_statuses").
Set(goqu.Record{
"is_packed": requestBody.IsPacked,
"is_settled": requestBody.IsSettled,
"updated_at": goqu.L("NOW()"),
}).
Where(goqu.Ex{"buy_report_id": buyReportId})

query, _, err := updateDs.ToSQL()
if err != nil {
return err
}

err = brr.crud.UpdateDB(c, query)
if err != nil {
return err
}

return nil

}

type PostBuyReport = generated.BuyReport
type PutBuyReport = generated.PutBuyReportStatusBuyReportIdJSONRequestBody

var selectBuyReportDetailsQuery = dialect.From("buy_reports").Select(
"buy_reports.amount",
"divisions.name",
"festival_items.name",
"financial_records.name",
"buy_reports.id",
"buy_statuses.is_packed",
"buy_statuses.is_settled",
"buy_reports.paid_by",
goqu.I("buy_reports.created_at").As("reportDate"),
).
InnerJoin(goqu.I("buy_statuses"), goqu.On(goqu.I("buy_reports.id").Eq(goqu.I("buy_statuses.buy_report_id")))).
InnerJoin(goqu.I("festival_items"), goqu.On(goqu.I("buy_reports.festival_item_id").Eq(goqu.I("festival_items.id")))).
InnerJoin(goqu.I("divisions"), goqu.On(goqu.I("festival_items.division_id").Eq(goqu.I("divisions.id")))).
InnerJoin(goqu.I("financial_records"), goqu.On(goqu.I("divisions.financial_record_id").Eq(goqu.I("financial_records.id")))).
InnerJoin(goqu.I("years"), goqu.On(goqu.I("financial_records.year_id").Eq(goqu.I("years.id")))).
Order(goqu.I("reportDate").Desc())
71 changes: 71 additions & 0 deletions api/internals/usecase/buy_report_usecase.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
rep "github.com/NUTFes/FinanSu/api/externals/repository"
"github.com/NUTFes/FinanSu/api/generated"
"github.com/NUTFes/FinanSu/api/internals/domain"
"github.com/pkg/errors"
)

type buyReportUseCase struct {
Expand All @@ -22,6 +23,8 @@ type BuyReportUseCase interface {
CreateBuyReport(context.Context, PostBuyReport, *multipart.FileHeader) (PostBuyReport, error)
UpdateBuyReport(context.Context, string, PostBuyReport, *multipart.FileHeader) (PostBuyReport, error)
DeleteBuyReport(context.Context, string) error
GetBuyReports(context.Context, string) ([]BuyReportDetail, error)
UpdateBuyReportStatus(context.Context, string, PutBuyReport) (BuyReportDetail, error)
}

func NewBuyReportUseCase(bRep rep.BuyReportRepository, tRep rep.TransactionRepository, oRep rep.ObjectHandleRepository) BuyReportUseCase {
Expand Down Expand Up @@ -240,8 +243,76 @@ func (bru *buyReportUseCase) DeleteBuyReport(c context.Context, buyReportId stri
return nil
}

func (bru *buyReportUseCase) GetBuyReports(c context.Context, year string) ([]BuyReportDetail, error) {
var buyReportDetails []BuyReportDetail

rows, err := bru.bRep.AllByPeriod(c, year)
if err != nil {
return []BuyReportDetail{}, nil
}
defer rows.Close()

for rows.Next() {
detail := BuyReportDetail{}
err := rows.Scan(
&detail.Amount,
&detail.DivisionName,
&detail.FestivalItemName,
&detail.FinancialRecordName,
&detail.Id,
&detail.IsPacked,
&detail.IsSettled,
&detail.PaidBy,
&detail.ReportDate,
)

if err != nil {
return nil, errors.Wrapf(err, "failed to scan SQL row")
}

buyReportDetails = append(buyReportDetails, detail)
}

return buyReportDetails, nil
}

func (bru *buyReportUseCase) UpdateBuyReportStatus(c context.Context, buyReportId string, requestBody PutBuyReport) (BuyReportDetail, error) {

detail := BuyReportDetail{}

err := bru.bRep.UpdateBuyReportStatus(c, buyReportId, requestBody)
if err != nil {
return BuyReportDetail{}, err
}

row, err := bru.bRep.GetByBuyReportId(c, buyReportId)
if err != nil {
return BuyReportDetail{}, err
}

err = row.Scan(
&detail.Amount,
&detail.DivisionName,
&detail.FestivalItemName,
&detail.FinancialRecordName,
&detail.Id,
&detail.IsPacked,
&detail.IsSettled,
&detail.PaidBy,
&detail.ReportDate,
)

if err != nil {
return detail, errors.Wrapf(err, "failed to scan SQL row for buy report id %s", buyReportId)
}

return detail, nil
}

type PostBuyReport = generated.BuyReport
type PaymentReceiptWithYear = domain.PaymentReceiptWithYear
type BuyReportDetail = generated.BuyReportDetail
type PutBuyReport = generated.PutBuyReportStatusBuyReportIdJSONRequestBody

var DIR_NAME = "receipts"

Expand Down
2 changes: 2 additions & 0 deletions api/router/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,8 @@ func (r router) ProvideRouter(e *echo.Echo) {
e.POST("/buy_reports", r.buyReportController.CreateBuyReport)
e.PUT("/buy_reports/:id", r.buyReportController.UpdateBuyReport)
e.DELETE("/buy_reports/:id", r.buyReportController.DeleteBuyReport)
e.GET("/buy_reports/details", r.buyReportController.IndexBuyReport)
e.PUT("/buy_report/status/:buy_report_id", r.buyReportController.UpdateBuyReportStatus)

// current_user
e.GET("/current_user", r.userController.GetCurrentUser)
Expand Down