package Services import ( "context" "forgejo.merr.is/annika/isl-api/Types" "forgejo.merr.is/annika/isl-api/sql/powerItem" "github.com/jackc/pgtype" ) type PowerItemService struct { querier *powerItem.DBQuerier context context.Context } func NewPowerItemService(querier *powerItem.DBQuerier) *PowerItemService { return &PowerItemService{ querier: querier, context: context.Background(), } } func (p *PowerItemService) GetAll() ([]Types.PowerItem, error) { rows, err := p.querier.GetAllItems(p.context) if err != nil { return []Types.PowerItem{}, err } var powerItems []Types.PowerItem for _, sqlItem := range rows { powerItems = append(powerItems, Types.FromGetAllItemsRow(sqlItem)) } return powerItems, nil } func (p *PowerItemService) GetAllByType(itemType int) ([]Types.PowerItem, error) { rows, err := p.querier.GetAllByType(p.context, int32(itemType)) if err != nil { return []Types.PowerItem{}, err } var powerItems []Types.PowerItem for _, sqlItem := range rows { powerItems = append(powerItems, Types.FromGetAllItemsByTypeRow(sqlItem)) } return powerItems, nil } func (p *PowerItemService) Add(newItem Types.PowerItem) (Types.PowerItem, error) { sqlItem := powerItem.AddNewItemWithIDParams{ ID: newItem.ID, ItemType: newItem.ItemType, IconUrl: newItem.IconURL, ItemName: newItem.ItemName, MinItemPower: newItem.MinItemPower, MaxItemPower: newItem.MaxItemPower, Rarity: newItem.Rarity, Origin: newItem.Origin, Tooltip: newItem.Tooltip, IsEventItem: newItem.IsEventItem, } row, err := p.querier.AddNewItemWithID(p.context, powerItem.AddNewItemWithIDParams(sqlItem)) if err != nil { return Types.PowerItem{}, err } return Types.FromAddNewItemWithIDParams(row), nil } func (p *PowerItemService) AddMultipile(newItems map[string]Types.PowerItem, itemType int32) ([]Types.PowerItem, []error) { var errors []error var addedItems []Types.PowerItem for key, value := range newItems { id := pgtype.UUID{} id.Set(key) newItem := powerItem.AddNewItemWithIDParams{ ID: id, ItemType: itemType, IconUrl: value.IconURL, ItemName: value.ItemName, MinItemPower: value.MinItemPower, MaxItemPower: value.MaxItemPower, Rarity: value.Rarity, Origin: value.Origin, Tooltip: value.Tooltip, IsEventItem: value.IsEventItem, } row, err := p.querier.AddNewItemWithID(p.context, powerItem.AddNewItemWithIDParams(newItem)) if err != nil { errors = append(errors, err) continue } addedItems = append(addedItems, Types.FromAddNewItemWithIDParams(row)) } return addedItems, errors }