first commit
This commit is contained in:
291
internal/modules/cardmaster/service.go
Normal file
291
internal/modules/cardmaster/service.go
Normal file
@@ -0,0 +1,291 @@
|
||||
package cardmaster
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
|
||||
"cardverse/internal/pkg/utils"
|
||||
)
|
||||
|
||||
var ErrCardNotFound = errors.New("kartu tidak ditemukan")
|
||||
|
||||
type Service interface {
|
||||
GetAllPaginated(query ListCardMasterQuery) ([]CardMaster, int64, error)
|
||||
GetByID(id uint) (*CardMaster, error)
|
||||
GetElements() []ElementResponse
|
||||
Create(req CreateCardMasterRequest) (*CardMaster, error)
|
||||
Update(id uint, req UpdateCardMasterRequest) (*CardMaster, error)
|
||||
Delete(id uint) error
|
||||
}
|
||||
|
||||
type service struct {
|
||||
repo Repository
|
||||
}
|
||||
|
||||
func NewService(repo Repository) Service {
|
||||
return &service{
|
||||
repo: repo,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *service) GetAllPaginated(query ListCardMasterQuery) ([]CardMaster, int64, error) {
|
||||
page := query.Page
|
||||
if page < 1 {
|
||||
page = 1
|
||||
}
|
||||
limit := query.Limit
|
||||
if limit < 1 {
|
||||
limit = 20
|
||||
}
|
||||
|
||||
return s.repo.FindAllPaginated(page, limit, query)
|
||||
}
|
||||
|
||||
func (s *service) GetByID(id uint) (*CardMaster, error) {
|
||||
c, err := s.repo.FindByID(id)
|
||||
if err != nil {
|
||||
return nil, ErrCardNotFound
|
||||
}
|
||||
return c, nil
|
||||
}
|
||||
|
||||
func (s *service) GetElements() []ElementResponse {
|
||||
return GetElementsResponse()
|
||||
}
|
||||
|
||||
func (s *service) Create(req CreateCardMasterRequest) (*CardMaster, error) {
|
||||
elementImage := req.ElementImage
|
||||
if elementImage == "" && req.Element != "" {
|
||||
elementImage = GetElementImage(req.Element)
|
||||
}
|
||||
|
||||
c := &CardMaster{
|
||||
IDSet: req.IDSet,
|
||||
Name: req.Name,
|
||||
Number: req.Number,
|
||||
Image: req.Image,
|
||||
Stage: req.Stage,
|
||||
Element: req.Element,
|
||||
ElementImage: elementImage,
|
||||
EvolvesFrom: req.EvolvesFrom,
|
||||
Illustrator: req.Illustrator,
|
||||
Regulation: req.Regulation,
|
||||
Rarity: req.Rarity,
|
||||
IDPriceChartingEng: req.IDPriceChartingEng,
|
||||
LinkPriceChartingEng: req.LinkPriceChartingEng,
|
||||
IDPriceChartingJpn: req.IDPriceChartingJpn,
|
||||
LinkPriceChartingJpn: req.LinkPriceChartingJpn,
|
||||
}
|
||||
|
||||
if req.HP != nil {
|
||||
req.HP.ElementImage = GetElementImage(req.HP.Element)
|
||||
bytes, err := json.Marshal(req.HP)
|
||||
if err == nil {
|
||||
c.HP = JSONB(bytes)
|
||||
}
|
||||
}
|
||||
|
||||
if req.Attacks != nil {
|
||||
for i := range req.Attacks {
|
||||
for j := range req.Attacks[i].Cost {
|
||||
req.Attacks[i].Cost[j].Image = GetElementImage(req.Attacks[i].Cost[j].Element)
|
||||
}
|
||||
}
|
||||
bytes, err := json.Marshal(req.Attacks)
|
||||
if err == nil {
|
||||
c.Attacks = JSONB(bytes)
|
||||
}
|
||||
}
|
||||
|
||||
if req.Abilities != nil {
|
||||
bytes, err := json.Marshal(req.Abilities)
|
||||
if err == nil {
|
||||
c.Abilities = JSONB(bytes)
|
||||
}
|
||||
}
|
||||
|
||||
if req.Battle != nil {
|
||||
for i := range req.Battle.Weakness {
|
||||
req.Battle.Weakness[i].ElementImage = GetElementImage(req.Battle.Weakness[i].Element)
|
||||
}
|
||||
for i := range req.Battle.Resistance {
|
||||
req.Battle.Resistance[i].ElementImage = GetElementImage(req.Battle.Resistance[i].Element)
|
||||
}
|
||||
for i := range req.Battle.Retreat {
|
||||
req.Battle.Retreat[i].ElementImage = GetElementImage(req.Battle.Retreat[i].Element)
|
||||
}
|
||||
bytes, err := json.Marshal(req.Battle)
|
||||
if err == nil {
|
||||
c.Battle = JSONB(bytes)
|
||||
}
|
||||
}
|
||||
|
||||
if req.EvolutionLine != nil {
|
||||
bytes, err := json.Marshal(req.EvolutionLine)
|
||||
if err == nil {
|
||||
c.EvolutionLine = JSONB(bytes)
|
||||
}
|
||||
}
|
||||
|
||||
if req.PokedexInfo != nil {
|
||||
bytes, err := json.Marshal(req.PokedexInfo)
|
||||
if err == nil {
|
||||
c.PokedexInfo = JSONB(bytes)
|
||||
}
|
||||
}
|
||||
|
||||
if req.Effects != nil {
|
||||
bytes, err := json.Marshal(req.Effects)
|
||||
if err == nil {
|
||||
c.Effects = JSONB(bytes)
|
||||
}
|
||||
}
|
||||
|
||||
if err := s.repo.Create(c); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return c, nil
|
||||
}
|
||||
|
||||
func (s *service) Update(id uint, req UpdateCardMasterRequest) (*CardMaster, error) {
|
||||
c, err := s.repo.FindByID(id)
|
||||
if err != nil {
|
||||
return nil, ErrCardNotFound
|
||||
}
|
||||
|
||||
var oldIDSet uint
|
||||
if req.IDSet > 0 && req.IDSet != c.IDSet {
|
||||
oldIDSet = c.IDSet
|
||||
c.IDSet = req.IDSet
|
||||
}
|
||||
|
||||
if req.Name != "" {
|
||||
c.Name = req.Name
|
||||
}
|
||||
if req.Number != "" {
|
||||
c.Number = req.Number
|
||||
}
|
||||
if req.Image != "" {
|
||||
if c.Image != "" && c.Image != req.Image {
|
||||
utils.DeleteLocalFile(c.Image)
|
||||
}
|
||||
c.Image = req.Image
|
||||
}
|
||||
if req.Stage != "" {
|
||||
c.Stage = req.Stage
|
||||
}
|
||||
if req.Element != "" {
|
||||
c.Element = req.Element
|
||||
c.ElementImage = GetElementImage(req.Element)
|
||||
}
|
||||
if req.EvolvesFrom != "" {
|
||||
c.EvolvesFrom = req.EvolvesFrom
|
||||
}
|
||||
if req.Illustrator != "" {
|
||||
c.Illustrator = req.Illustrator
|
||||
}
|
||||
if req.Regulation != "" {
|
||||
c.Regulation = req.Regulation
|
||||
}
|
||||
if req.Rarity != "" {
|
||||
c.Rarity = req.Rarity
|
||||
}
|
||||
if req.IDPriceChartingEng != "" {
|
||||
c.IDPriceChartingEng = req.IDPriceChartingEng
|
||||
}
|
||||
if req.LinkPriceChartingEng != "" {
|
||||
c.LinkPriceChartingEng = req.LinkPriceChartingEng
|
||||
}
|
||||
if req.IDPriceChartingJpn != "" {
|
||||
c.IDPriceChartingJpn = req.IDPriceChartingJpn
|
||||
}
|
||||
if req.LinkPriceChartingJpn != "" {
|
||||
c.LinkPriceChartingJpn = req.LinkPriceChartingJpn
|
||||
}
|
||||
|
||||
if req.HP != nil {
|
||||
req.HP.ElementImage = GetElementImage(req.HP.Element)
|
||||
bytes, err := json.Marshal(req.HP)
|
||||
if err == nil {
|
||||
c.HP = JSONB(bytes)
|
||||
}
|
||||
}
|
||||
|
||||
if req.Attacks != nil {
|
||||
for i := range req.Attacks {
|
||||
for j := range req.Attacks[i].Cost {
|
||||
req.Attacks[i].Cost[j].Image = GetElementImage(req.Attacks[i].Cost[j].Element)
|
||||
}
|
||||
}
|
||||
bytes, err := json.Marshal(req.Attacks)
|
||||
if err == nil {
|
||||
c.Attacks = JSONB(bytes)
|
||||
}
|
||||
}
|
||||
|
||||
if req.Abilities != nil {
|
||||
bytes, err := json.Marshal(req.Abilities)
|
||||
if err == nil {
|
||||
c.Abilities = JSONB(bytes)
|
||||
}
|
||||
}
|
||||
|
||||
if req.Battle != nil {
|
||||
for i := range req.Battle.Weakness {
|
||||
req.Battle.Weakness[i].ElementImage = GetElementImage(req.Battle.Weakness[i].Element)
|
||||
}
|
||||
for i := range req.Battle.Resistance {
|
||||
req.Battle.Resistance[i].ElementImage = GetElementImage(req.Battle.Resistance[i].Element)
|
||||
}
|
||||
for i := range req.Battle.Retreat {
|
||||
req.Battle.Retreat[i].ElementImage = GetElementImage(req.Battle.Retreat[i].Element)
|
||||
}
|
||||
bytes, err := json.Marshal(req.Battle)
|
||||
if err == nil {
|
||||
c.Battle = JSONB(bytes)
|
||||
}
|
||||
}
|
||||
|
||||
if req.EvolutionLine != nil {
|
||||
bytes, err := json.Marshal(req.EvolutionLine)
|
||||
if err == nil {
|
||||
c.EvolutionLine = JSONB(bytes)
|
||||
}
|
||||
}
|
||||
|
||||
if req.PokedexInfo != nil {
|
||||
bytes, err := json.Marshal(req.PokedexInfo)
|
||||
if err == nil {
|
||||
c.PokedexInfo = JSONB(bytes)
|
||||
}
|
||||
}
|
||||
|
||||
if req.Effects != nil {
|
||||
bytes, err := json.Marshal(req.Effects)
|
||||
if err == nil {
|
||||
c.Effects = JSONB(bytes)
|
||||
}
|
||||
}
|
||||
|
||||
if err := s.repo.Update(c, oldIDSet); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return c, nil
|
||||
}
|
||||
|
||||
func (s *service) Delete(id uint) error {
|
||||
c, err := s.repo.FindByID(id)
|
||||
if err != nil {
|
||||
return ErrCardNotFound
|
||||
}
|
||||
|
||||
idSet := c.IDSet
|
||||
|
||||
if c.Image != "" {
|
||||
utils.DeleteLocalFile(c.Image)
|
||||
}
|
||||
|
||||
return s.repo.Delete(id, idSet)
|
||||
}
|
||||
Reference in New Issue
Block a user