From 832780ce54205018444d8dae0396d37f25cf41ec Mon Sep 17 00:00:00 2001 From: clz Date: Mon, 8 May 2023 15:07:20 +0800 Subject: [PATCH] feat: bill service --- internal/bill/domain.go | 2 +- internal/bill/service.go | 55 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 internal/bill/service.go diff --git a/internal/bill/domain.go b/internal/bill/domain.go index bb830c6..7681d35 100644 --- a/internal/bill/domain.go +++ b/internal/bill/domain.go @@ -34,6 +34,6 @@ type BillService interface { FetchBills(ctx context.Context, date BDate) (*[]Bill, error) FetchBillByID(ctx context.Context, id int) (*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 } diff --git a/internal/bill/service.go b/internal/bill/service.go new file mode 100644 index 0000000..92976b9 --- /dev/null +++ b/internal/bill/service.go @@ -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) +}