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 }