package repository import ( "context" dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db" "github.com/SamuelTariku/FortuneBet-Backend/internal/domain" "github.com/jackc/pgx/v5/pgtype" ) func convertCreateCompany(company domain.CreateCompany) dbgen.CreateCompanyParams { return dbgen.CreateCompanyParams{ Name: company.Name, AdminID: company.AdminID, WalletID: company.WalletID, } } func convertDBCompany(dbCompany dbgen.Company) domain.Company { return domain.Company{ ID: dbCompany.ID, Name: dbCompany.Name, AdminID: dbCompany.AdminID, WalletID: dbCompany.WalletID, } } func convertDBCompanyDetails(dbCompany dbgen.CompaniesDetail) domain.GetCompany { return domain.GetCompany{ ID: dbCompany.ID, Name: dbCompany.Name, AdminID: dbCompany.AdminID, WalletID: dbCompany.WalletID, WalletBalance: domain.Currency(dbCompany.Balance), IsWalletActive: dbCompany.IsActive, AdminFirstName: dbCompany.AdminFirstName, AdminLastName: dbCompany.AdminLastName, AdminPhoneNumber: dbCompany.AdminPhoneNumber.String, } } func convertUpdateCompany(updateCompany domain.UpdateCompany) dbgen.UpdateCompanyParams { var newUpdateCompany dbgen.UpdateCompanyParams newUpdateCompany.ID = updateCompany.ID if updateCompany.Name != nil { newUpdateCompany.Name = pgtype.Text{ String: *updateCompany.Name, Valid: true, } } if updateCompany.AdminID != nil { newUpdateCompany.AdminID = pgtype.Int8{ Int64: *updateCompany.AdminID, Valid: true, } } return newUpdateCompany } func (s *Store) CreateCompany(ctx context.Context, company domain.CreateCompany) (domain.Company, error) { dbCompany, err := s.queries.CreateCompany(ctx, convertCreateCompany(company)) if err != nil { return domain.Company{}, err } return convertDBCompany(dbCompany), nil } func (s *Store) GetAllCompanies(ctx context.Context) ([]domain.GetCompany, error) { dbCompanies, err := s.queries.GetAllCompanies(ctx) if err != nil { return nil, err } var companies []domain.GetCompany = make([]domain.GetCompany, 0, len(dbCompanies)) for _, dbCompany := range dbCompanies { companies = append(companies, convertDBCompanyDetails(dbCompany)) } return companies, nil } func (s *Store) SearchCompanyByName(ctx context.Context, name string) ([]domain.GetCompany, error) { dbCompanies, err := s.queries.SearchCompanyByName(ctx, pgtype.Text{ String: name, Valid: true, }) if err != nil { return nil, err } var companies []domain.GetCompany = make([]domain.GetCompany, 0, len(dbCompanies)) for _, dbCompany := range dbCompanies { companies = append(companies, convertDBCompanyDetails(dbCompany)) } return companies, nil } func (s *Store) GetCompanyByID(ctx context.Context, id int64) (domain.GetCompany, error) { dbCompany, err := s.queries.GetCompanyByID(ctx, id) if err != nil { return domain.GetCompany{}, err } return convertDBCompanyDetails(dbCompany), nil } func (s *Store) UpdateCompany(ctx context.Context, company domain.UpdateCompany) (domain.Company, error) { dbCompany, err := s.queries.UpdateCompany(ctx, convertUpdateCompany(company)) if err != nil { return domain.Company{}, err } return convertDBCompany(dbCompany), nil } func (s *Store) DeleteCompany(ctx context.Context, id int64) error { return s.queries.DeleteCompany(ctx, id) }