From 52dfb7e0f2e03ea209ae3c1c92f68ae1d1d24003 Mon Sep 17 00:00:00 2001 From: ericprd Date: Mon, 10 Mar 2025 10:50:27 +0800 Subject: [PATCH] feat: delete ads --- internal/accessor/ads/delete.go | 26 ++++++++++++++++ internal/accessor/ads/impl.go | 1 + internal/api/http/ads/delete.go | 53 +++++++++++++++++++++++++++++++++ internal/api/http/ads/module.go | 1 + internal/services/ads/delete.go | 5 ++++ internal/services/ads/impl.go | 12 ++------ 6 files changed, 88 insertions(+), 10 deletions(-) create mode 100644 internal/accessor/ads/delete.go create mode 100644 internal/api/http/ads/delete.go create mode 100644 internal/services/ads/delete.go diff --git a/internal/accessor/ads/delete.go b/internal/accessor/ads/delete.go new file mode 100644 index 0000000..49464ac --- /dev/null +++ b/internal/accessor/ads/delete.go @@ -0,0 +1,26 @@ +package adsrepository + +import ( + "errors" + "fmt" + adsdomain "legalgo-BE-go/internal/domain/ads" + + "gorm.io/gorm" +) + +func (a *accessor) Delete(id string) error { + var ads adsdomain.Ads + if err := a.db.First(&ads, "id = ?", id).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return fmt.Errorf("ads with id %s is not found", id) + + } + return fmt.Errorf("failed to g ads %s : %v", id, err) + } + + if err := a.db.Delete(&ads).Error; err != nil { + return fmt.Errorf("failed to delete ads %s : %v", id, err) + } + + return nil +} diff --git a/internal/accessor/ads/impl.go b/internal/accessor/ads/impl.go index 4b389c3..f6d367f 100644 --- a/internal/accessor/ads/impl.go +++ b/internal/accessor/ads/impl.go @@ -12,6 +12,7 @@ type accessor struct { type Ads interface { Create(adsdomain.Ads) error GetAll() ([]adsdomain.Ads, error) + Delete(string) error } func New( diff --git a/internal/api/http/ads/delete.go b/internal/api/http/ads/delete.go new file mode 100644 index 0000000..89d6e4b --- /dev/null +++ b/internal/api/http/ads/delete.go @@ -0,0 +1,53 @@ +package adshttp + +import ( + "fmt" + authmiddleware "legalgo-BE-go/internal/api/http/middleware/auth" + adssvc "legalgo-BE-go/internal/services/ads" + "legalgo-BE-go/internal/utilities/response" + "net/http" + + "github.com/go-chi/chi/v5" +) + +func Delete( + router chi.Router, + adsSvc adssvc.Ads, +) { + router. + With(authmiddleware.Authorize()). + Delete("/ads/{ads_id}/delete", func(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + adsID := chi.URLParam(r, "ads_id") + + if adsID == "" { + response.RespondJsonErrorWithCode( + ctx, + w, + fmt.Errorf("ads id is not provided"), + response.ErrBadRequest.Code, + response.ErrBadRequest.HttpCode, + "ads id is not provided", + ) + return + } + + if err := adsSvc.Delete(adsID); err != nil { + response.RespondJsonErrorWithCode( + ctx, + w, + err, + response.ErrBadRequest.Code, + response.ErrBadRequest.HttpCode, + err.Error(), + ) + return + } + + response.RespondJsonSuccess(ctx, w, struct { + Message string + }{ + Message: "ads has been deleted", + }) + }) +} diff --git a/internal/api/http/ads/module.go b/internal/api/http/ads/module.go index a77e17c..fd214a4 100644 --- a/internal/api/http/ads/module.go +++ b/internal/api/http/ads/module.go @@ -5,4 +5,5 @@ import "go.uber.org/fx" var Module = fx.Module("ads-http", fx.Invoke( Create, GetAll, + Delete, )) diff --git a/internal/services/ads/delete.go b/internal/services/ads/delete.go new file mode 100644 index 0000000..eb9b892 --- /dev/null +++ b/internal/services/ads/delete.go @@ -0,0 +1,5 @@ +package adssvc + +func (i *impl) Delete(id string) error { + return i.adsRepo.Delete(id) +} diff --git a/internal/services/ads/impl.go b/internal/services/ads/impl.go index 74e09d9..7bca408 100644 --- a/internal/services/ads/impl.go +++ b/internal/services/ads/impl.go @@ -2,31 +2,23 @@ package adssvc import ( adsrepository "legalgo-BE-go/internal/accessor/ads" - "legalgo-BE-go/internal/accessor/oss" adsdomain "legalgo-BE-go/internal/domain/ads" - - "github.com/go-playground/validator/v10" ) type impl struct { - ossRepo oss.OSSRepository - adsRepo adsrepository.Ads - validate *validator.Validate + adsRepo adsrepository.Ads } type Ads interface { Create(adsdomain.AdsReq) error GetAll() ([]adsdomain.Ads, error) + Delete(string) error } func New( - ossRepo oss.OSSRepository, adsRepo adsrepository.Ads, - validate *validator.Validate, ) Ads { return &impl{ - ossRepo, adsRepo, - validate, } }