Skip to content

Commit

Permalink
getのapi作成
Browse files Browse the repository at this point in the history
  • Loading branch information
Kubosaka committed Jan 8, 2025
1 parent 3ca3853 commit b4eab42
Show file tree
Hide file tree
Showing 2 changed files with 114 additions and 17 deletions.
41 changes: 24 additions & 17 deletions api/externals/repository/festival_item_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,20 +41,23 @@ func (fir *festivalItemRepository) All(
c context.Context,
) (*sql.Rows, error) {
query, _, err := dialect.Select(
"financial_records.id",
"financial_records.name", "years.year",
goqu.COALESCE(goqu.SUM("item_budgets.amount"), 0).As("budget"),
"festival_items.id",
"festival_items.name",
"festival_items.memo",
"financial_records.name",
"divisions.name",
goqu.L("COALESCE(`item_budgets`.`amount`, 0)").As("budget"),
goqu.COALESCE(goqu.SUM("buy_reports.amount"), 0).As("expense"),
goqu.COALESCE(goqu.L("SUM(item_budgets.amount) - SUM(buy_reports.amount)"), 0).As("balance")).
From("financial_records").
goqu.COALESCE(goqu.L("item_budgets.amount - COALESCE(SUM(`buy_reports`.`amount`), 0)"), 0).As("balance")).
From("festival_items").
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")))).
LeftJoin(goqu.I("divisions"), goqu.On(goqu.I("financial_records.id").Eq(goqu.I("divisions.financial_record_id")))).
LeftJoin(goqu.I("festival_items"), goqu.On(goqu.I("divisions.id").Eq(goqu.I("festival_items.division_id")))).
LeftJoin(goqu.I("item_budgets"), goqu.On(goqu.I("festival_items.id").Eq(goqu.I("item_budgets.festival_item_id")))).
LeftJoin(goqu.I("buy_reports"), goqu.On(goqu.I("festival_items.id").Eq(goqu.I("buy_reports.festival_item_id")))).
GroupBy("financial_records.id").
GroupBy("festival_items.id", "item_budgets.amount").
Order(goqu.I("festival_items.id").Desc()).
ToSQL()

if err != nil {
return nil, err
}
Expand All @@ -67,18 +70,22 @@ func (fir *festivalItemRepository) AllByPeriod(
year string,
) (*sql.Rows, error) {
query, _, err := dialect.Select(
"financial_records.id",
"financial_records.name", "years.year",
goqu.COALESCE(goqu.SUM("item_budgets.amount"), 0).As("budget"),
"festival_items.id",
"festival_items.name",
"festival_items.memo",
"financial_records.name",
"divisions.name",
goqu.L("COALESCE(`item_budgets`.`amount`, 0)").As("budget"),
goqu.COALESCE(goqu.SUM("buy_reports.amount"), 0).As("expense"),
goqu.COALESCE(goqu.L("SUM(item_budgets.amount) - SUM(buy_reports.amount)"), 0).As("balance")).
From("financial_records").
goqu.COALESCE(goqu.L("item_budgets.amount - COALESCE(SUM(`buy_reports`.`amount`), 0)"), 0).As("balance")).
From("festival_items").
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")))).
LeftJoin(goqu.I("divisions"), goqu.On(goqu.I("financial_records.id").Eq(goqu.I("divisions.financial_record_id")))).
LeftJoin(goqu.I("festival_items"), goqu.On(goqu.I("divisions.id").Eq(goqu.I("festival_items.division_id")))).
LeftJoin(goqu.I("item_budgets"), goqu.On(goqu.I("festival_items.id").Eq(goqu.I("item_budgets.festival_item_id")))).
LeftJoin(goqu.I("buy_reports"), goqu.On(goqu.I("festival_items.id").Eq(goqu.I("buy_reports.festival_item_id")))).
GroupBy("financial_records.id").
GroupBy("festival_items.id", "item_budgets.amount").
Order(goqu.I("festival_items.id").Desc()).
Where(goqu.Ex{"years.year": year}).
ToSQL()
if err != nil {
Expand Down
90 changes: 90 additions & 0 deletions api/internals/usecase/festival_item_usecase.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,51 @@ func (fiu *festivalItemUseCase) GetFestivalItems(
c context.Context,
) (generated.FestivalItemDetails, error) {
var festivalItemDetails generated.FestivalItemDetails
var festivalItems []generated.FestivalItemWithBalance

rows, err := fiu.rep.All(c)
if err != nil {
return festivalItemDetails, err
}

defer rows.Close()
for rows.Next() {
var festivalItem generated.FestivalItemWithBalance
err := rows.Scan(
&festivalItem.Id,
&festivalItem.Name,
&festivalItem.Memo,
&festivalItem.FinancialRecord,
&festivalItem.Division,
&festivalItem.Budget,
&festivalItem.Expense,
&festivalItem.Balance,
)
if err != nil {
return festivalItemDetails, err
}
festivalItems = append(festivalItems, festivalItem)
}
festivalItemDetails.FestivalItems = &festivalItems

var total generated.Total

// totalを求める
budgetTotal := 0
expenseTotal := 0
balanceTotal := 0

for _, festivalItem := range festivalItems {
budgetTotal += *festivalItem.Budget
expenseTotal += *festivalItem.Expense
balanceTotal += *festivalItem.Balance
}

total.Budget = &budgetTotal
total.Expense = &expenseTotal
total.Balance = &balanceTotal

festivalItemDetails.Total = &total
return festivalItemDetails, nil
}

Expand All @@ -42,6 +87,51 @@ func (fiu *festivalItemUseCase) GetFestivalItemsByYears(
year string,
) (generated.FestivalItemDetails, error) {
var festivalItemDetails generated.FestivalItemDetails
var festivalItems []generated.FestivalItemWithBalance

rows, err := fiu.rep.AllByPeriod(c, year)
if err != nil {
return festivalItemDetails, err
}

defer rows.Close()
for rows.Next() {
var festivalItem generated.FestivalItemWithBalance
err := rows.Scan(
&festivalItem.Id,
&festivalItem.Name,
&festivalItem.Memo,
&festivalItem.FinancialRecord,
&festivalItem.Division,
&festivalItem.Budget,
&festivalItem.Expense,
&festivalItem.Balance,
)
if err != nil {
return festivalItemDetails, err
}
festivalItems = append(festivalItems, festivalItem)
}
festivalItemDetails.FestivalItems = &festivalItems

var total generated.Total

// totalを求める
budgetTotal := 0
expenseTotal := 0
balanceTotal := 0

for _, festivalItem := range festivalItems {
budgetTotal += *festivalItem.Budget
expenseTotal += *festivalItem.Expense
balanceTotal += *festivalItem.Balance
}

total.Budget = &budgetTotal
total.Expense = &expenseTotal
total.Balance = &balanceTotal

festivalItemDetails.Total = &total
return festivalItemDetails, nil
}

Expand Down

0 comments on commit b4eab42

Please sign in to comment.