53 lines
1.6 KiB
Go
53 lines
1.6 KiB
Go
package business
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"kra/internal/biz/business"
|
|
"kra/internal/service/dto"
|
|
)
|
|
|
|
type OtherSettingsUsecase interface {
|
|
Get(context.Context) (*business.OtherSettings, error)
|
|
Save(context.Context, business.OtherSettings) (*business.OtherSettings, error)
|
|
}
|
|
|
|
type OtherSettingsService struct{ uc OtherSettingsUsecase }
|
|
|
|
func NewOtherSettingsService(uc *business.OtherSettingsUsecase) *OtherSettingsService {
|
|
return &OtherSettingsService{uc: uc}
|
|
}
|
|
|
|
func otherSettingsResponse(value *business.OtherSettings) *dto.OtherSettingsResponse {
|
|
defaults := business.DefaultOtherSettings()
|
|
result := &dto.OtherSettingsResponse{OtherSettingsValues: dto.OtherSettingsValues{Amount: value.Amount, Days: value.Days}, Defaults: dto.OtherSettingsValues{Amount: defaults.Amount, Days: defaults.Days}}
|
|
if !value.UpdatedAt.IsZero() {
|
|
result.UpdatedAt = value.UpdatedAt.Format(time.RFC3339)
|
|
}
|
|
return result
|
|
}
|
|
|
|
func (s *OtherSettingsService) Get(ctx context.Context) (*dto.OtherSettingsResponse, error) {
|
|
value, err := s.uc.Get(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return otherSettingsResponse(value), nil
|
|
}
|
|
|
|
func (s *OtherSettingsService) Save(ctx context.Context, req *dto.OtherSettingsRequest) (*dto.OtherSettingsResponse, error) {
|
|
if req == nil || req.Amount == nil || req.Days == nil {
|
|
return nil, business.ErrOtherSettingsInput
|
|
}
|
|
value := business.OtherSettings{Amount: *req.Amount, Days: *req.Days}
|
|
if err := business.ValidateOtherSettings(value); err != nil {
|
|
return nil, err
|
|
}
|
|
saved, err := s.uc.Save(ctx, value)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return otherSettingsResponse(saved), nil
|
|
}
|