/
Arsinenko
/
CompClubAPI_Go
Обзор
Документация
Войти
/
Arsinenko
/
CompClubAPI_Go
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
internal/services/tariff_service.go
131 строка
3 KB
Arsinenko
Update
08 ноя 2025, 13:12
08 ноя 2025, 13:12
2f36b0f
Код
Авторство
О чём код?
package services import ( "CompClubAPI/internal/database/gen" "context" "database/sql" "errors" "github.com/lib/pq" ) type TariffModel struct { Name string `json:"name"` Price string `json:"price"` } func (t TariffModel) Validate() string { if t.Name == "" { return "name is required" } if t.Price == "" { return "price is required" } return "" } type TariffService interface { CreateTariff(model TariffModel) (TariffModel, error) GetTariffs() ([]TariffModel, error) GetTariff(name string) (TariffModel, error) UpdateTariff(model TariffModel) (TariffModel, error) DeleteTariff(name string) error } type tariffService struct { queries *gen.Queries } func NewTariffService(queries *gen.Queries) TariffService { return &tariffService{queries: queries} } func (t tariffService) CreateTariff(model TariffModel) (TariffModel, error) { validationError := model.Validate() if validationError != "" { return TariffModel{}, errors.New("bad request: " + validationError) } tariff, err := t.queries.CreateTariff(context.Background(), gen.CreateTariffParams{ Name: model.Name, Price: model.Price, }) if err != nil { var pqError *pq.Error if errors.As(err, &pqError); pqError.Code == "23505" { return TariffModel{}, errors.New("tariff already exists") } return TariffModel{}, err } return TariffModel{ Name: tariff.Name, Price: tariff.Price, }, nil } func (t tariffService) GetTariffs() ([]TariffModel, error) { tariffs, err := t.queries.GetAllTariffs(context.Background()) if err != nil { if errors.Is(err, sql.ErrNoRows) { return nil, errors.New("tariffs not found") } return nil, err } result := make([]TariffModel, len(tariffs)) for i, tariff := range tariffs { result[i] = TariffModel{ Name: tariff.Name, Price: tariff.Price, } } return result, nil } func (t tariffService) GetTariff(name string) (TariffModel, error) { tariff, err := t.queries.GetTariff(context.Background(), name) if err != nil { if errors.Is(err, sql.ErrNoRows) { return TariffModel{}, errors.New("tariff not found") } return TariffModel{}, err } return TariffModel{ Name: tariff.Name, Price: tariff.Price, }, err } func (t tariffService) UpdateTariff(model TariffModel) (TariffModel, error) { validationError := model.Validate() if validationError != "" { return TariffModel{}, errors.New("bad request: " + validationError) } tariff, err := t.queries.UpdatePrice(context.Background(), gen.UpdatePriceParams{ Name: model.Name, Price: model.Price, }) if err != nil { if errors.Is(err, sql.ErrNoRows) { return TariffModel{}, errors.New("tariff not found") } return TariffModel{}, err } return TariffModel{ Name: tariff.Name, Price: tariff.Price, }, nil } func (t tariffService) DeleteTariff(name string) error { if name == "" { return errors.New("bad request: " + "name is required") } err := t.queries.DeleteTariff(context.Background(), name) if err != nil { if errors.Is(err, sql.ErrNoRows) { return errors.New("tariff not found") } return err } return nil }