package services import ( "context" "forgejo.merr.is/annika/isl-api/entities" "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() ([]entities.PowerItem, error) { rows, err := p.querier.GetAllItems(p.context) if err != nil { return []entities.PowerItem{}, err } var powerItems []entities.PowerItem for _, sqlItem := range rows { powerItems = append(powerItems, entities.FromGetAllItemsRow(sqlItem)) } return powerItems, nil } func (p *PowerItemService) GetAllByType(itemType int) ([]entities.PowerItem, error) { rows, err := p.querier.GetAllByType(p.context, int32(itemType)) if err != nil { return []entities.PowerItem{}, err } var powerItems []entities.PowerItem for _, sqlItem := range rows { powerItems = append(powerItems, entities.FromGetAllItemsByTypeRow(sqlItem)) } return powerItems, nil } func (p *PowerItemService) Add(newItem entities.PowerItem) (entities.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 entities.PowerItem{}, err } return entities.FromAddNewItemWithIDParams(row), nil } func (p *PowerItemService) AddMultipile(newItems map[string]entities.PowerItem, itemType int32) ([]entities.PowerItem, []error) { var errors []error var addedItems []entities.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, entities.FromAddNewItemWithIDParams(row)) } return addedItems, errors }