feat: bill service

This commit is contained in:
clz 2023-05-08 15:07:20 +08:00
parent 1e96c35919
commit 832780ce54
2 changed files with 56 additions and 1 deletions

View File

@ -34,6 +34,6 @@ type BillService interface {
FetchBills(ctx context.Context, date BDate) (*[]Bill, error) FetchBills(ctx context.Context, date BDate) (*[]Bill, error)
FetchBillByID(ctx context.Context, id int) (*Bill, error) FetchBillByID(ctx context.Context, id int) (*Bill, error)
BuildBill(ctx context.Context, bill *Bill) error BuildBill(ctx context.Context, bill *Bill) error
ModifyBill(ctx context.Context, id int) error ModifyBill(ctx context.Context, bill *Bill) error
DestroyBill(ctx context.Context, id int) error DestroyBill(ctx context.Context, id int) error
} }

55
internal/bill/service.go Normal file
View File

@ -0,0 +1,55 @@
package bill
import (
"context"
"time"
)
type billService struct {
billRepository BillRepository
}
func NewBillService(r BillRepository) BillService {
return &billService{
billRepository: r,
}
}
// FetchBills
// - date is {year, month, day} when return a day bills
// - date is {year, month} when return a month bills
// - date is {year} when return a year bills
// - date is {} when return all bills
func (b *billService) FetchBills(ctx context.Context, date BDate) (*[]Bill, error) {
if date.Year == 0 && (date.Month != 0 || date.Day != 0) {
date.Year = time.Now().Year()
} else if date.Month == 0 && date.Day != 0 {
date.Month = int(time.Now().Month())
}
switch {
case date.Year == 0:
return b.billRepository.GetBills(ctx)
case date.Month == 0:
return b.billRepository.GetBillByYear(ctx, date.Year)
case date.Day == 0:
return b.billRepository.GetBillByMonth(ctx, date.Year, date.Month)
default:
return b.billRepository.GetBillByDate(ctx, date.Year, date.Month, date.Day)
}
}
func (b *billService) FetchBillByID(ctx context.Context, id int) (*Bill, error) {
return b.billRepository.GetBillByID(ctx, id)
}
func (b *billService) BuildBill(ctx context.Context, bill *Bill) error {
return b.billRepository.CreateBill(ctx, bill)
}
func (b *billService) ModifyBill(ctx context.Context, bill *Bill) error {
return b.billRepository.UpdateBill(ctx, bill)
}
func (b *billService) DestroyBill(ctx context.Context, id int) error {
return b.billRepository.DeleteBill(ctx, id)
}