package domain import ( "time" dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db" "github.com/jackc/pgx/v5/pgtype" ) // Company represents the client that we will contract the services with // they are the ones that manage the branches and branch managers // they will have their own wallet that they will use to distribute to the branch wallets type Company struct { ID int64 Name string Slug string AdminID int64 WalletID int64 DeductedPercentage float32 IsActive bool } type CompanyFilter struct { IsActive ValidBool Query ValidString CreatedBefore ValidTime CreatedAfter ValidTime } type GetCompany struct { ID int64 Name string Slug string AdminID int64 AdminFirstName string AdminLastName string AdminPhoneNumber string WalletID int64 WalletBalance Currency IsWalletActive bool DeductedPercentage float32 IsActive bool TotalBets int64 TotalStake Currency DeductedStake Currency TotalCashOut Currency TotalCashBacks Currency NumberOfUnsettled int64 TotalUnsettledAmount Currency TotalAdmins int64 TotalManagers int64 TotalCashiers int64 TotalCustomers int64 TotalApprovers int64 TotalBranches int64 StatsUpdatedAt time.Time } type CreateCompany struct { Name string AdminID int64 WalletID int64 DeductedPercentage float32 Slug string IsActive bool } type UpdateCompany struct { ID int64 Name ValidString AdminID ValidInt64 IsActive ValidBool DeductedPercentage ValidFloat32 Slug ValidString } type CreateCompanyReq struct { Name string `json:"name" example:"CompanyName"` AdminID int64 `json:"admin_id" example:"1"` DeductedPercentage float32 `json:"deducted_percentage" example:"0.1" validate:"lt=1"` Slug string `json:"slug"` IsActive bool `json:"is_active"` } type UpdateCompanyReq struct { Name *string `json:"name,omitempty" example:"CompanyName"` AdminID *int64 `json:"admin_id,omitempty" example:"1"` IsActive *bool `json:"is_active,omitempty" example:"true"` DeductedPercentage *float32 `json:"deducted_percentage,omitempty" example:"0.1" validate:"lt=1"` Slug *string `json:"slug"` } type CompanyRes struct { ID int64 `json:"id" example:"1"` Name string `json:"name" example:"CompanyName"` Slug string `json:"slug" example:"slug"` AdminID int64 `json:"admin_id" example:"1"` WalletID int64 `json:"wallet_id" example:"1"` DeductedPercentage float32 `json:"deducted_percentage" example:"0.1"` IsActive bool `json:"is_active" example:"true"` } type GetCompanyRes struct { ID int64 `json:"id" example:"1"` Name string `json:"name" example:"CompanyName"` Slug string `json:"slug" example:"slug"` AdminID int64 `json:"admin_id" example:"1"` WalletID int64 `json:"wallet_id" example:"1"` WalletBalance float32 `json:"balance" example:"1"` WalletIsActive bool `json:"is_wallet_active" example:"false"` IsActive bool `json:"is_active" example:"false"` DeductedPercentage float32 `json:"deducted_percentage" example:"0.1"` AdminFirstName string `json:"admin_first_name" example:"John"` AdminLastName string `json:"admin_last_name" example:"Doe"` AdminPhoneNumber string `json:"admin_phone_number" example:"1234567890"` TotalBets int64 `json:"total_bets"` TotalStake float32 `json:"total_stake"` DeductedStake float32 `json:"deducted_stake"` TotalCashOut float32 `json:"total_cash_out"` TotalCashBacks float32 `json:"total_cash_backs"` NumberOfUnsettled int64 `json:"number_of_unsettled"` TotalUnsettledAmount float32 `json:"total_unsettled_amount"` TotalAdmins int64 `json:"total_admins"` TotalManagers int64 `json:"total_managers"` TotalCashiers int64 `json:"total_cashiers"` TotalCustomers int64 `json:"total_customers"` TotalApprovers int64 `json:"total_approvers"` TotalBranches int64 `json:"total_branches"` StatsUpdatedAt time.Time `json:"stats_updated_at"` } func ConvertCompany(company Company) CompanyRes { return CompanyRes(company) } func ConvertGetCompany(company GetCompany) GetCompanyRes { return GetCompanyRes{ ID: company.ID, Name: company.Name, Slug: company.Slug, AdminID: company.AdminID, WalletID: company.WalletID, WalletBalance: company.WalletBalance.Float32(), IsActive: company.IsActive, WalletIsActive: company.IsWalletActive, DeductedPercentage: company.DeductedPercentage, AdminFirstName: company.AdminFirstName, AdminLastName: company.AdminLastName, AdminPhoneNumber: company.AdminPhoneNumber, TotalBets: company.TotalBets, TotalStake: company.TotalStake.Float32(), DeductedStake: company.DeductedStake.Float32(), TotalCashOut: company.TotalCashOut.Float32(), TotalCashBacks: company.TotalCashBacks.Float32(), NumberOfUnsettled: company.NumberOfUnsettled, TotalUnsettledAmount: company.TotalUnsettledAmount.Float32(), TotalAdmins: company.TotalAdmins, TotalManagers: company.TotalManagers, TotalCashiers: company.TotalCashiers, TotalCustomers: company.TotalCustomers, TotalApprovers: company.TotalApprovers, TotalBranches: company.TotalBranches, StatsUpdatedAt: company.StatsUpdatedAt, } } func ConvertCreateCompany(company CreateCompany) dbgen.CreateCompanyParams { return dbgen.CreateCompanyParams{ Name: company.Name, Slug: company.Slug, AdminID: company.AdminID, WalletID: company.WalletID, DeductedPercentage: company.DeductedPercentage, IsActive: company.IsActive, } } func ConvertDBCompany(dbCompany dbgen.Company) Company { return Company{ ID: dbCompany.ID, Name: dbCompany.Name, Slug: dbCompany.Slug, AdminID: dbCompany.AdminID, WalletID: dbCompany.WalletID, DeductedPercentage: dbCompany.DeductedPercentage, IsActive: dbCompany.IsActive, } } func ConvertDBCompanyDetails(dbCompany dbgen.CompaniesDetail) GetCompany { return GetCompany{ ID: dbCompany.ID, Name: dbCompany.Name, Slug: dbCompany.Slug, AdminID: dbCompany.AdminID, WalletID: dbCompany.WalletID, WalletBalance: Currency(dbCompany.Balance), IsWalletActive: dbCompany.WalletIsActive, AdminFirstName: dbCompany.AdminFirstName, AdminLastName: dbCompany.AdminLastName, AdminPhoneNumber: dbCompany.AdminPhoneNumber.String, DeductedPercentage: dbCompany.DeductedPercentage, IsActive: dbCompany.IsActive, TotalBets: dbCompany.TotalBets, TotalStake: Currency(dbCompany.TotalStake), DeductedStake: Currency(dbCompany.DeductedStake), TotalCashOut: Currency(dbCompany.TotalCashOut), TotalCashBacks: Currency(dbCompany.TotalCashBacks), NumberOfUnsettled: dbCompany.NumberOfUnsettled, TotalUnsettledAmount: Currency(dbCompany.TotalUnsettledAmount), TotalAdmins: dbCompany.TotalAdmins, TotalManagers: dbCompany.TotalManagers, TotalCashiers: dbCompany.TotalCashiers, TotalCustomers: dbCompany.TotalCustomers, TotalApprovers: dbCompany.TotalApprovers, TotalBranches: dbCompany.TotalBranches, StatsUpdatedAt: dbCompany.StatsUpdatedAt.Time, } } func ConvertUpdateCompany(updateCompany UpdateCompany) dbgen.UpdateCompanyParams { newUpdateCompany := dbgen.UpdateCompanyParams{ ID: updateCompany.ID, Name: updateCompany.Name.ToPG(), AdminID: updateCompany.AdminID.ToPG(), IsActive: updateCompany.IsActive.ToPG(), DeductedPercentage: updateCompany.DeductedPercentage.ToPG(), Slug: updateCompany.Slug.ToPG(), } return newUpdateCompany } func ConvertUpdateCompanyReq(req UpdateCompanyReq, companyID int64) UpdateCompany { var updateCompany UpdateCompany updateCompany.ID = companyID if req.Name != nil { updateCompany.Name = ValidString{ Value: *req.Name, Valid: true, } } if req.AdminID != nil { updateCompany.AdminID = ValidInt64{ Value: *req.AdminID, Valid: true, } } if req.IsActive != nil { updateCompany.IsActive = ValidBool{ Value: *req.IsActive, Valid: true, } } if req.DeductedPercentage != nil { updateCompany.DeductedPercentage = ValidFloat32{ Value: *req.DeductedPercentage, Valid: true, } } if req.Slug != nil { updateCompany.Slug = ValidString{ Value: *req.Slug, Valid: true, } } return updateCompany } func ConvertGetAllCompaniesParams(filter CompanyFilter) dbgen.GetAllCompaniesParams { return dbgen.GetAllCompaniesParams{ Query: pgtype.Text{ String: filter.Query.Value, Valid: filter.Query.Valid, }, CreatedBefore: pgtype.Timestamp{ Time: filter.CreatedBefore.Value, Valid: filter.CreatedBefore.Valid, }, CreatedAfter: pgtype.Timestamp{ Time: filter.CreatedAfter.Value, Valid: filter.CreatedAfter.Valid, }, } }