fix: update user plan and rearrange structur project
This commit is contained in:
parent
a47b7b7d3d
commit
13c976dcbf
@ -7,7 +7,7 @@ import (
|
|||||||
redisaccessor "legalgo-BE-go/internal/accessor/redis"
|
redisaccessor "legalgo-BE-go/internal/accessor/redis"
|
||||||
staffrepository "legalgo-BE-go/internal/accessor/staff"
|
staffrepository "legalgo-BE-go/internal/accessor/staff"
|
||||||
subscriberepository "legalgo-BE-go/internal/accessor/subscribe"
|
subscriberepository "legalgo-BE-go/internal/accessor/subscribe"
|
||||||
subscribeplanrepository "legalgo-BE-go/internal/accessor/subscribeplan"
|
subscribeplanrepository "legalgo-BE-go/internal/accessor/subscribe_plan"
|
||||||
tagrepository "legalgo-BE-go/internal/accessor/tag"
|
tagrepository "legalgo-BE-go/internal/accessor/tag"
|
||||||
userrepository "legalgo-BE-go/internal/accessor/user"
|
userrepository "legalgo-BE-go/internal/accessor/user"
|
||||||
|
|
||||||
|
|||||||
@ -6,13 +6,13 @@ import (
|
|||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (s *SubsAccs) Create(subsPlanId string) (string, error) {
|
func (s *accessor) Create(subsPlanId string) (string, error) {
|
||||||
spec := &subscribedomain.Subscribe{
|
spec := &subscribedomain.Subscribe{
|
||||||
ID: uuid.NewString(),
|
ID: uuid.NewString(),
|
||||||
SubscribePlanID: subsPlanId,
|
SubscribePlanID: subsPlanId,
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := s.DB.Create(&spec).Error; err != nil {
|
if err := s.db.Create(&spec).Error; err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3,15 +3,15 @@ package subscriberepository
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"legalgo-BE-go/database"
|
subscribedomain "legalgo-BE-go/internal/domain/subscribe"
|
||||||
|
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (s *SubsAccs) GetByID(id string) (database.Subscribe, error) {
|
func (s *accessor) GetByID(id string) (subscribedomain.Subscribe, error) {
|
||||||
var subscribe database.Subscribe
|
var subscribe subscribedomain.Subscribe
|
||||||
|
|
||||||
if err := s.DB.First(&subscribe, "id = ?", id).Error; err != nil {
|
if err := s.db.First(&subscribe, "id = ?", id).Error; err != nil {
|
||||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
return subscribe, fmt.Errorf("subscribe data not found: %v", err)
|
return subscribe, fmt.Errorf("subscribe data not found: %v", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,17 +1,20 @@
|
|||||||
package subscriberepository
|
package subscriberepository
|
||||||
|
|
||||||
import "legalgo-BE-go/database"
|
import (
|
||||||
|
"legalgo-BE-go/database"
|
||||||
|
subscribedomain "legalgo-BE-go/internal/domain/subscribe"
|
||||||
|
)
|
||||||
|
|
||||||
type SubsAccs struct {
|
type accessor struct {
|
||||||
DB *database.DB
|
db *database.DB
|
||||||
}
|
}
|
||||||
|
|
||||||
type SubsIntf interface {
|
type Subscribe interface {
|
||||||
Create(string) (string, error)
|
Create(string) (string, error)
|
||||||
GetByID(string) (database.Subscribe, error)
|
GetByID(string) (subscribedomain.Subscribe, error)
|
||||||
UpdateSubscribeStatus(database.Subscribe) error
|
Update(subscribedomain.Subscribe) error
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(db *database.DB) SubsIntf {
|
func New(db *database.DB) Subscribe {
|
||||||
return &SubsAccs{db}
|
return &accessor{db}
|
||||||
}
|
}
|
||||||
|
|||||||
19
internal/accessor/subscribe/update.go
Normal file
19
internal/accessor/subscribe/update.go
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package subscriberepository
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
subscribedomain "legalgo-BE-go/internal/domain/subscribe"
|
||||||
|
|
||||||
|
"gorm.io/gorm/clause"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (a *accessor) Update(spec subscribedomain.Subscribe) error {
|
||||||
|
if err := a.db.Clauses(clause.OnConflict{
|
||||||
|
Columns: []clause.Column{{Name: "id"}},
|
||||||
|
DoUpdates: clause.AssignmentColumns([]string{"status", "subscribe_plan_id", "start_date"}),
|
||||||
|
}).Create(&spec).Error; err != nil {
|
||||||
|
return fmt.Errorf("failed to update status: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@ -1,19 +0,0 @@
|
|||||||
package subscriberepository
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"legalgo-BE-go/database"
|
|
||||||
|
|
||||||
"gorm.io/gorm/clause"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (a *SubsAccs) UpdateSubscribeStatus(spec database.Subscribe) error {
|
|
||||||
if err := a.DB.Clauses(clause.OnConflict{
|
|
||||||
Columns: []clause.Column{{Name: "id"}},
|
|
||||||
DoUpdates: clause.AssignmentColumns([]string{"status"}),
|
|
||||||
}).Create(&spec).Error; err != nil {
|
|
||||||
return fmt.Errorf("failed to update status: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
13
internal/accessor/subscribe_plan/create.go
Normal file
13
internal/accessor/subscribe_plan/create.go
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
package subscribeplanrepository
|
||||||
|
|
||||||
|
import (
|
||||||
|
subscribeplandomain "legalgo-BE-go/internal/domain/subscribe_plan"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (s *accessor) Create(spec subscribeplandomain.SubscribePlan) error {
|
||||||
|
if err := s.db.Create(&spec).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
30
internal/accessor/subscribe_plan/delete.go
Normal file
30
internal/accessor/subscribe_plan/delete.go
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
package subscribeplanrepository
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"legalgo-BE-go/database"
|
||||||
|
subscribedomain "legalgo-BE-go/internal/domain/subscribe"
|
||||||
|
subscribeplandomain "legalgo-BE-go/internal/domain/subscribe_plan"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (a *accessor) Delete(id string) error {
|
||||||
|
var subsPlan database.SubscribePlan
|
||||||
|
var basicPlan subscribeplandomain.SubscribePlan
|
||||||
|
|
||||||
|
if err := a.db.First(&basicPlan, "code = ?", "basic").Error; err != nil {
|
||||||
|
return fmt.Errorf("failed to find basic plan: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := a.db.
|
||||||
|
Model(&subscribedomain.Subscribe{}).
|
||||||
|
Where("subscribe_plan_id = ?", id).
|
||||||
|
Update("subscribe_plan_id", basicPlan.ID); err != nil {
|
||||||
|
return fmt.Errorf("failed to change subscribe plan: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := a.db.Where("id = ?", id).Delete(&subsPlan).Error; err != nil {
|
||||||
|
return fmt.Errorf("failed to delete subscribe plan %s : %v", id, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@ -4,10 +4,10 @@ import (
|
|||||||
subscribeplandomain "legalgo-BE-go/internal/domain/subscribe_plan"
|
subscribeplandomain "legalgo-BE-go/internal/domain/subscribe_plan"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (s *SubsPlan) GetAll() ([]subscribeplandomain.SubscribePlan, error) {
|
func (s *accessor) GetAll() ([]subscribeplandomain.SubscribePlan, error) {
|
||||||
var subscribePlans []subscribeplandomain.SubscribePlan
|
var subscribePlans []subscribeplandomain.SubscribePlan
|
||||||
|
|
||||||
if err := s.DB.Find(&subscribePlans).Error; err != nil {
|
if err := s.db.Find(&subscribePlans).Error; err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
21
internal/accessor/subscribe_plan/get_by_id.go
Normal file
21
internal/accessor/subscribe_plan/get_by_id.go
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package subscribeplanrepository
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
subscribeplandomain "legalgo-BE-go/internal/domain/subscribe_plan"
|
||||||
|
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (s *accessor) GetByID(id string) (*subscribeplandomain.SubscribePlan, error) {
|
||||||
|
var subscribePlan *subscribeplandomain.SubscribePlan
|
||||||
|
|
||||||
|
if err := s.db.First(&subscribePlan, "id = ? ", id).Error; err != nil {
|
||||||
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
return subscribePlan, errors.New("subscribe plan not found")
|
||||||
|
}
|
||||||
|
return subscribePlan, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return subscribePlan, nil
|
||||||
|
}
|
||||||
22
internal/accessor/subscribe_plan/get_default.go
Normal file
22
internal/accessor/subscribe_plan/get_default.go
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
package subscribeplanrepository
|
||||||
|
|
||||||
|
import (
|
||||||
|
"legalgo-BE-go/database"
|
||||||
|
subscribeplandomain "legalgo-BE-go/internal/domain/subscribe_plan"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (s *accessor) GetDefault() (*subscribeplandomain.SubscribePlan, error) {
|
||||||
|
var subscribePlan *subscribeplandomain.SubscribePlan
|
||||||
|
|
||||||
|
if err := s.db.First(&subscribePlan, "code = ?", "basic").Error; err != nil {
|
||||||
|
s.db.Create(&database.SubscribePlan{
|
||||||
|
ID: uuid.NewString(),
|
||||||
|
Code: "basic",
|
||||||
|
Name: "Basic",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return subscribePlan, nil
|
||||||
|
}
|
||||||
25
internal/accessor/subscribe_plan/impl.go
Normal file
25
internal/accessor/subscribe_plan/impl.go
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
package subscribeplanrepository
|
||||||
|
|
||||||
|
import (
|
||||||
|
"legalgo-BE-go/database"
|
||||||
|
subscribeplandomain "legalgo-BE-go/internal/domain/subscribe_plan"
|
||||||
|
)
|
||||||
|
|
||||||
|
type accessor struct {
|
||||||
|
db *database.DB
|
||||||
|
}
|
||||||
|
|
||||||
|
type SubscribePlan interface {
|
||||||
|
Create(subscribeplandomain.SubscribePlan) error
|
||||||
|
GetAll() ([]subscribeplandomain.SubscribePlan, error)
|
||||||
|
GetByID(string) (*subscribeplandomain.SubscribePlan, error)
|
||||||
|
GetDefault() (*subscribeplandomain.SubscribePlan, error)
|
||||||
|
Update(subscribeplandomain.SubscribePlan) error
|
||||||
|
Delete(string) error
|
||||||
|
}
|
||||||
|
|
||||||
|
func New(
|
||||||
|
db *database.DB,
|
||||||
|
) SubscribePlan {
|
||||||
|
return &accessor{db}
|
||||||
|
}
|
||||||
23
internal/accessor/subscribe_plan/update.go
Normal file
23
internal/accessor/subscribe_plan/update.go
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
package subscribeplanrepository
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
subscribeplandomain "legalgo-BE-go/internal/domain/subscribe_plan"
|
||||||
|
|
||||||
|
"gorm.io/gorm/clause"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (a *accessor) Update(spec subscribeplandomain.SubscribePlan) error {
|
||||||
|
if err := a.db.Clauses(clause.OnConflict{
|
||||||
|
Columns: []clause.Column{{Name: "id"}},
|
||||||
|
DoUpdates: clause.AssignmentColumns([]string{
|
||||||
|
"name",
|
||||||
|
"code",
|
||||||
|
"updated_at",
|
||||||
|
}),
|
||||||
|
}).Select("name", "code", "updated_at").Save(&spec).Error; err != nil {
|
||||||
|
return fmt.Errorf("failed to update tag: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@ -1,21 +0,0 @@
|
|||||||
package subscribeplanrepository
|
|
||||||
|
|
||||||
import (
|
|
||||||
subscribeplandomain "legalgo-BE-go/internal/domain/subscribe_plan"
|
|
||||||
|
|
||||||
"github.com/google/uuid"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (s *SubsPlan) Create(spec subscribeplandomain.SubscribePlanReq) error {
|
|
||||||
data := &subscribeplandomain.SubscribePlan{
|
|
||||||
ID: uuid.NewString(),
|
|
||||||
Code: spec.Code,
|
|
||||||
Name: spec.Name,
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := s.DB.Create(&data).Error; err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
@ -1,21 +0,0 @@
|
|||||||
package subscribeplanrepository
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"legalgo-BE-go/database"
|
|
||||||
|
|
||||||
"gorm.io/gorm"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (s *SubsPlan) GetByID(id string) (*database.SubscribePlan, error) {
|
|
||||||
var subscribePlan *database.SubscribePlan
|
|
||||||
|
|
||||||
if err := s.DB.First(&subscribePlan, "id = ? ", id).Error; err != nil {
|
|
||||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
||||||
return subscribePlan, errors.New("subscribe plan not found")
|
|
||||||
}
|
|
||||||
return subscribePlan, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return subscribePlan, nil
|
|
||||||
}
|
|
||||||
@ -1,21 +0,0 @@
|
|||||||
package subscribeplanrepository
|
|
||||||
|
|
||||||
import (
|
|
||||||
"legalgo-BE-go/database"
|
|
||||||
|
|
||||||
"github.com/google/uuid"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (s *SubsPlan) GetDefault() (*database.SubscribePlan, error) {
|
|
||||||
var subscribePlan *database.SubscribePlan
|
|
||||||
|
|
||||||
if err := s.DB.First(&subscribePlan, "code = ?", "basic").Error; err != nil {
|
|
||||||
s.DB.Create(&database.SubscribePlan{
|
|
||||||
ID: uuid.NewString(),
|
|
||||||
Code: "basic",
|
|
||||||
Name: "Basic",
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return subscribePlan, nil
|
|
||||||
}
|
|
||||||
@ -1,23 +0,0 @@
|
|||||||
package subscribeplanrepository
|
|
||||||
|
|
||||||
import (
|
|
||||||
"legalgo-BE-go/database"
|
|
||||||
subscribeplandomain "legalgo-BE-go/internal/domain/subscribe_plan"
|
|
||||||
)
|
|
||||||
|
|
||||||
type SubsPlan struct {
|
|
||||||
DB *database.DB
|
|
||||||
}
|
|
||||||
|
|
||||||
type SubsPlanIntf interface {
|
|
||||||
Create(subscribeplandomain.SubscribePlanReq) error
|
|
||||||
GetAll() ([]subscribeplandomain.SubscribePlan, error)
|
|
||||||
GetByID(string) (*database.SubscribePlan, error)
|
|
||||||
GetDefault() (*database.SubscribePlan, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
func New(
|
|
||||||
db *database.DB,
|
|
||||||
) SubsPlanIntf {
|
|
||||||
return &SubsPlan{db}
|
|
||||||
}
|
|
||||||
@ -5,6 +5,7 @@ import (
|
|||||||
newshttp "legalgo-BE-go/internal/api/http/news"
|
newshttp "legalgo-BE-go/internal/api/http/news"
|
||||||
osshttp "legalgo-BE-go/internal/api/http/oss"
|
osshttp "legalgo-BE-go/internal/api/http/oss"
|
||||||
staffhttp "legalgo-BE-go/internal/api/http/staffhttp"
|
staffhttp "legalgo-BE-go/internal/api/http/staffhttp"
|
||||||
|
subscribehttp "legalgo-BE-go/internal/api/http/subscribe"
|
||||||
subscribeplanhttp "legalgo-BE-go/internal/api/http/subscribe_plan"
|
subscribeplanhttp "legalgo-BE-go/internal/api/http/subscribe_plan"
|
||||||
taghttp "legalgo-BE-go/internal/api/http/tag"
|
taghttp "legalgo-BE-go/internal/api/http/tag"
|
||||||
userhttp "legalgo-BE-go/internal/api/http/user"
|
userhttp "legalgo-BE-go/internal/api/http/user"
|
||||||
@ -29,6 +30,7 @@ var Module = fx.Module("router",
|
|||||||
newshttp.Module,
|
newshttp.Module,
|
||||||
osshttp.Module,
|
osshttp.Module,
|
||||||
userhttp.Module,
|
userhttp.Module,
|
||||||
|
subscribehttp.Module,
|
||||||
)
|
)
|
||||||
|
|
||||||
func initRouter() chi.Router {
|
func initRouter() chi.Router {
|
||||||
|
|||||||
@ -2,4 +2,6 @@ package subscribehttp
|
|||||||
|
|
||||||
import "go.uber.org/fx"
|
import "go.uber.org/fx"
|
||||||
|
|
||||||
var Module = fx.Module("subscribe", fx.Invoke())
|
var Module = fx.Module("subscribe", fx.Invoke(
|
||||||
|
Update,
|
||||||
|
))
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
package subscribehttp
|
package subscribehttp
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
userrepository "legalgo-BE-go/internal/accessor/user"
|
||||||
authmiddleware "legalgo-BE-go/internal/api/http/middleware/auth"
|
authmiddleware "legalgo-BE-go/internal/api/http/middleware/auth"
|
||||||
userdomain "legalgo-BE-go/internal/domain/user"
|
userdomain "legalgo-BE-go/internal/domain/user"
|
||||||
authsvc "legalgo-BE-go/internal/services/auth"
|
|
||||||
subscribesvc "legalgo-BE-go/internal/services/subscribe"
|
subscribesvc "legalgo-BE-go/internal/services/subscribe"
|
||||||
"legalgo-BE-go/internal/utilities/response"
|
"legalgo-BE-go/internal/utilities/response"
|
||||||
"legalgo-BE-go/internal/utilities/utils"
|
"legalgo-BE-go/internal/utilities/utils"
|
||||||
@ -14,7 +14,7 @@ import (
|
|||||||
|
|
||||||
func Update(
|
func Update(
|
||||||
router chi.Router,
|
router chi.Router,
|
||||||
authSvc authsvc.Auth,
|
userRepo userrepository.User,
|
||||||
subSvc subscribesvc.Subscribe,
|
subSvc subscribesvc.Subscribe,
|
||||||
) {
|
) {
|
||||||
router.
|
router.
|
||||||
@ -60,9 +60,11 @@ func Update(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
user, err := authSvc.GetUserProfile(detail.Email)
|
user, err := userRepo.GetUserProfile(detail.Email)
|
||||||
|
|
||||||
if err := subSvc.Update(user.ID, body); err != nil {
|
body.ID = user.Subscribe.ID
|
||||||
|
|
||||||
|
if err := subSvc.Update(body); err != nil {
|
||||||
response.ResponseWithErrorCode(
|
response.ResponseWithErrorCode(
|
||||||
ctx,
|
ctx,
|
||||||
w,
|
w,
|
||||||
@ -73,5 +75,11 @@ func Update(
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
response.RespondJsonSuccess(ctx, w, struct {
|
||||||
|
Message string
|
||||||
|
}{
|
||||||
|
Message: "update user plan success",
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -49,7 +49,7 @@ func CreateSubscribePlan(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := subsSvc.CreatePlan(spec); err != nil {
|
if err := subsSvc.Create(spec); err != nil {
|
||||||
response.ResponseWithErrorCode(
|
response.ResponseWithErrorCode(
|
||||||
ctx,
|
ctx,
|
||||||
w,
|
w,
|
||||||
|
|||||||
53
internal/api/http/subscribe_plan/delete.go
Normal file
53
internal/api/http/subscribe_plan/delete.go
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
package subscribeplanhttp
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
authmiddleware "legalgo-BE-go/internal/api/http/middleware/auth"
|
||||||
|
subscribeplansvc "legalgo-BE-go/internal/services/subscribe_plan"
|
||||||
|
"legalgo-BE-go/internal/utilities/response"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/go-chi/chi/v5"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Delete(
|
||||||
|
router chi.Router,
|
||||||
|
subscribePlanSvc subscribeplansvc.SubscribePlan,
|
||||||
|
) {
|
||||||
|
router.
|
||||||
|
With(authmiddleware.Authorize()).
|
||||||
|
Delete("/subscribe-plan/{subsplan_id}/delete", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
ctx := r.Context()
|
||||||
|
subsPlanID := chi.URLParam(r, "subsplan_id")
|
||||||
|
|
||||||
|
if subsPlanID == "" {
|
||||||
|
response.RespondJsonErrorWithCode(
|
||||||
|
ctx,
|
||||||
|
w,
|
||||||
|
fmt.Errorf("subscribe plan id is not provided"),
|
||||||
|
response.ErrBadRequest.Code,
|
||||||
|
response.ErrBadRequest.HttpCode,
|
||||||
|
"subscribe plan id is not provided",
|
||||||
|
)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := subscribePlanSvc.Delete(subsPlanID); err != nil {
|
||||||
|
response.RespondJsonErrorWithCode(
|
||||||
|
ctx,
|
||||||
|
w,
|
||||||
|
err,
|
||||||
|
response.ErrBadRequest.Code,
|
||||||
|
response.ErrBadRequest.HttpCode,
|
||||||
|
err.Error(),
|
||||||
|
)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
response.RespondJsonSuccess(ctx, w, struct {
|
||||||
|
Message string
|
||||||
|
}{
|
||||||
|
Message: "subscribe plan has been deleted",
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
@ -6,5 +6,7 @@ var Module = fx.Module("subscribe-plan",
|
|||||||
fx.Invoke(
|
fx.Invoke(
|
||||||
CreateSubscribePlan,
|
CreateSubscribePlan,
|
||||||
GetAllPlan,
|
GetAllPlan,
|
||||||
|
Update,
|
||||||
|
Delete,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|||||||
82
internal/api/http/subscribe_plan/update.go
Normal file
82
internal/api/http/subscribe_plan/update.go
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
package subscribeplanhttp
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
authmiddleware "legalgo-BE-go/internal/api/http/middleware/auth"
|
||||||
|
subscribeplandomain "legalgo-BE-go/internal/domain/subscribe_plan"
|
||||||
|
subscribeplansvc "legalgo-BE-go/internal/services/subscribe_plan"
|
||||||
|
"legalgo-BE-go/internal/utilities/response"
|
||||||
|
"legalgo-BE-go/internal/utilities/utils"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/go-chi/chi/v5"
|
||||||
|
"github.com/go-playground/validator/v10"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Update(
|
||||||
|
router chi.Router,
|
||||||
|
validate *validator.Validate,
|
||||||
|
subsPlanSvc subscribeplansvc.SubscribePlan,
|
||||||
|
) {
|
||||||
|
router.
|
||||||
|
With(authmiddleware.Authorize()).
|
||||||
|
Put("/subscribe-plan/{subsplan_id}/update", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
ctx := r.Context()
|
||||||
|
tagID := chi.URLParam(r, "subsplan_id")
|
||||||
|
|
||||||
|
if tagID == "" {
|
||||||
|
response.RespondJsonErrorWithCode(
|
||||||
|
ctx,
|
||||||
|
w,
|
||||||
|
fmt.Errorf("subscribe plan id is not provided"),
|
||||||
|
response.ErrBadRequest.Code,
|
||||||
|
response.ErrBadRequest.HttpCode,
|
||||||
|
"subscribe plan id is not provided",
|
||||||
|
)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var spec subscribeplandomain.SubscribePlanUpdate
|
||||||
|
if err := utils.UnmarshalBody(r, &spec); err != nil {
|
||||||
|
response.RespondJsonErrorWithCode(
|
||||||
|
ctx,
|
||||||
|
w,
|
||||||
|
err,
|
||||||
|
response.ErrBadRequest.Code,
|
||||||
|
response.ErrBadRequest.HttpCode,
|
||||||
|
"failed to unmarshal body",
|
||||||
|
)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := validate.Struct(spec); err != nil {
|
||||||
|
response.RespondJsonErrorWithCode(
|
||||||
|
ctx,
|
||||||
|
w,
|
||||||
|
err,
|
||||||
|
response.ErrBadRequest.Code,
|
||||||
|
response.ErrBadRequest.HttpCode,
|
||||||
|
err.(validator.ValidationErrors).Error(),
|
||||||
|
)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := subsPlanSvc.Update(tagID, spec); err != nil {
|
||||||
|
response.RespondJsonErrorWithCode(
|
||||||
|
ctx,
|
||||||
|
w,
|
||||||
|
err,
|
||||||
|
response.ErrBadRequest.Code,
|
||||||
|
response.ErrBadRequest.HttpCode,
|
||||||
|
err.Error(),
|
||||||
|
)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
response.RespondJsonSuccess(ctx, w, struct {
|
||||||
|
Message string
|
||||||
|
}{
|
||||||
|
Message: "update subscribe plan success",
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
@ -16,23 +16,23 @@ func Delete(
|
|||||||
) {
|
) {
|
||||||
router.
|
router.
|
||||||
With(authmiddleware.Authorize()).
|
With(authmiddleware.Authorize()).
|
||||||
Delete("/tag/{category_id}/delete", func(w http.ResponseWriter, r *http.Request) {
|
Delete("/tag/{tag_id}/delete", func(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
categoryID := chi.URLParam(r, "category_id")
|
tagID := chi.URLParam(r, "tag_id")
|
||||||
|
|
||||||
if categoryID == "" {
|
if tagID == "" {
|
||||||
response.RespondJsonErrorWithCode(
|
response.RespondJsonErrorWithCode(
|
||||||
ctx,
|
ctx,
|
||||||
w,
|
w,
|
||||||
fmt.Errorf("category id is not provided"),
|
fmt.Errorf("tag id is not provided"),
|
||||||
response.ErrBadRequest.Code,
|
response.ErrBadRequest.Code,
|
||||||
response.ErrBadRequest.HttpCode,
|
response.ErrBadRequest.HttpCode,
|
||||||
"category id is not provided",
|
"tag id is not provided",
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := tagSvc.Delete(categoryID); err != nil {
|
if err := tagSvc.Delete(tagID); err != nil {
|
||||||
response.RespondJsonErrorWithCode(
|
response.RespondJsonErrorWithCode(
|
||||||
ctx,
|
ctx,
|
||||||
w,
|
w,
|
||||||
|
|||||||
@ -14,8 +14,7 @@ func GetAll(
|
|||||||
) {
|
) {
|
||||||
router.Get("/tag", func(w http.ResponseWriter, r *http.Request) {
|
router.Get("/tag", func(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
tags, err := tagSvc.GetAllModel()
|
tags, err := tagSvc.GetAll()
|
||||||
// tags, err := tagSvc.GetAll()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
response.ResponseWithErrorCode(
|
response.ResponseWithErrorCode(
|
||||||
ctx,
|
ctx,
|
||||||
|
|||||||
@ -3,7 +3,7 @@ package userhttp
|
|||||||
import (
|
import (
|
||||||
responsedomain "legalgo-BE-go/internal/domain/reponse"
|
responsedomain "legalgo-BE-go/internal/domain/reponse"
|
||||||
userdomain "legalgo-BE-go/internal/domain/user"
|
userdomain "legalgo-BE-go/internal/domain/user"
|
||||||
authsvc "legalgo-BE-go/internal/services/auth"
|
usersvc "legalgo-BE-go/internal/services/user"
|
||||||
"legalgo-BE-go/internal/utilities/response"
|
"legalgo-BE-go/internal/utilities/response"
|
||||||
"legalgo-BE-go/internal/utilities/utils"
|
"legalgo-BE-go/internal/utilities/utils"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -15,7 +15,7 @@ import (
|
|||||||
|
|
||||||
func Login(
|
func Login(
|
||||||
router chi.Router,
|
router chi.Router,
|
||||||
authSvc authsvc.Auth,
|
userSvc usersvc.User,
|
||||||
validate *validator.Validate,
|
validate *validator.Validate,
|
||||||
rdb *redis.Client,
|
rdb *redis.Client,
|
||||||
) {
|
) {
|
||||||
@ -48,7 +48,7 @@ func Login(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
token, err := authSvc.LoginAsUser(spec)
|
token, err := userSvc.LoginAsUser(spec)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
response.ResponseWithErrorCode(
|
response.ResponseWithErrorCode(
|
||||||
ctx,
|
ctx,
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package userhttp
|
package userhttp
|
||||||
|
|
||||||
import (
|
import (
|
||||||
authsvc "legalgo-BE-go/internal/services/auth"
|
usersvc "legalgo-BE-go/internal/services/user"
|
||||||
"legalgo-BE-go/internal/utilities/response"
|
"legalgo-BE-go/internal/utilities/response"
|
||||||
"legalgo-BE-go/internal/utilities/utils"
|
"legalgo-BE-go/internal/utilities/utils"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -11,7 +11,7 @@ import (
|
|||||||
|
|
||||||
func GetProfile(
|
func GetProfile(
|
||||||
router chi.Router,
|
router chi.Router,
|
||||||
authSvc authsvc.Auth,
|
userSvc usersvc.User,
|
||||||
) {
|
) {
|
||||||
router.Get("/user/profile", func(w http.ResponseWriter, r *http.Request) {
|
router.Get("/user/profile", func(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
@ -28,7 +28,7 @@ func GetProfile(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
userProfile, err := authSvc.GetUserProfile(destructedToken.Email)
|
userProfile, err := userSvc.GetUserProfile(destructedToken.Email)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
response.ResponseWithErrorCode(
|
response.ResponseWithErrorCode(
|
||||||
ctx,
|
ctx,
|
||||||
|
|||||||
@ -3,7 +3,7 @@ package userhttp
|
|||||||
import (
|
import (
|
||||||
responsedomain "legalgo-BE-go/internal/domain/reponse"
|
responsedomain "legalgo-BE-go/internal/domain/reponse"
|
||||||
userdomain "legalgo-BE-go/internal/domain/user"
|
userdomain "legalgo-BE-go/internal/domain/user"
|
||||||
authsvc "legalgo-BE-go/internal/services/auth"
|
usersvc "legalgo-BE-go/internal/services/user"
|
||||||
"legalgo-BE-go/internal/utilities/response"
|
"legalgo-BE-go/internal/utilities/response"
|
||||||
"legalgo-BE-go/internal/utilities/utils"
|
"legalgo-BE-go/internal/utilities/utils"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -16,7 +16,7 @@ import (
|
|||||||
func Register(
|
func Register(
|
||||||
router chi.Router,
|
router chi.Router,
|
||||||
validate *validator.Validate,
|
validate *validator.Validate,
|
||||||
authSvc authsvc.Auth,
|
authSvc usersvc.User,
|
||||||
rdb *redis.Client,
|
rdb *redis.Client,
|
||||||
) {
|
) {
|
||||||
router.Post("/user/register", func(w http.ResponseWriter, r *http.Request) {
|
router.Post("/user/register", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|||||||
@ -1,28 +1,18 @@
|
|||||||
package subscribedomain
|
package subscribedomain
|
||||||
|
|
||||||
import (
|
import (
|
||||||
subscribeplandm "legalgo-BE-go/internal/domain/subscribe_plan_model"
|
subscribeplan "legalgo-BE-go/internal/domain/subscribe_plan"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
type SubscribeDepecrate struct {
|
|
||||||
ID string `json:"id"`
|
|
||||||
SubscribePlanID string `json:"subscribe_plan_id"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type SubscribeUpdateReqDepecrate struct {
|
|
||||||
ID string `json:"id"`
|
|
||||||
Status string `json:"status"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// refactored
|
|
||||||
type Subscribe struct {
|
type Subscribe struct {
|
||||||
ID string `gorm:"primaryKey" json:"id"`
|
ID string `json:"id"`
|
||||||
SubscribePlanID string `gorm:"not null" json:"subscribe_plan_id"`
|
SubscribePlanID string `json:"subscribe_plan_id"`
|
||||||
StartDate time.Time `gorm:"default:CURRENT_TIMESTAMP"`
|
StartDate time.Time `json:"start_date"`
|
||||||
EndDate time.Time `gorm:"default:null"`
|
EndDate *time.Time `json:"end_date"`
|
||||||
Status string `gorm:"default:'inactive'"`
|
Status string `json:"status"`
|
||||||
AutoRenew bool `gorm:"default:true"`
|
AutoRenew bool `json:"auto_renew"`
|
||||||
|
UpdatedAt time.Time `json:"updated_at"`
|
||||||
|
|
||||||
SubscribePlan subscribeplandm.SubscribePlan `gorm:"foreignKey:SubscribePlanID;constraint:OnDelete:CASCADE" json:"subscribe_plan"`
|
SubscribePlan subscribeplan.SubscribePlan `gorm:"foreignKey:SubscribePlanID" json:"subscribe_plan"`
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,17 +0,0 @@
|
|||||||
package subscribedm
|
|
||||||
|
|
||||||
import (
|
|
||||||
subscribeplandm "legalgo-BE-go/internal/domain/subscribe_plan_model"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Subscribe struct {
|
|
||||||
ID string `json:"id"`
|
|
||||||
SubscribePlanID string `json:"subscribe_plan_id"`
|
|
||||||
StartDate time.Time `json:"start_date"`
|
|
||||||
EndDate *time.Time `json:"end_date"`
|
|
||||||
Status string `json:"status"`
|
|
||||||
AutoRenew bool `json:"auto_renew"`
|
|
||||||
|
|
||||||
SubscribePlan subscribeplandm.SubscribePlan `gorm:"foreignKey:SubscribePlanID" json:"subscribe_plan"`
|
|
||||||
}
|
|
||||||
@ -1,12 +1,22 @@
|
|||||||
package subscribeplandomain
|
package subscribeplandomain
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
|
type SubscribePlan struct {
|
||||||
|
ID string `json:"id"`
|
||||||
|
Code string `json:"code"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
CreatedAt time.Time `json:"created_at"`
|
||||||
|
UpdatedAt time.Time `json:"updated_at"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type SubscribePlanUpdate struct {
|
||||||
|
Code string `json:"code" validate:"required"`
|
||||||
|
Name string `json:"name" validate:"required"`
|
||||||
|
UpdatedAt time.Time `json:"updated_at"`
|
||||||
|
}
|
||||||
|
|
||||||
type SubscribePlanReq struct {
|
type SubscribePlanReq struct {
|
||||||
Code string `json:"code" validate:"required"`
|
Code string `json:"code" validate:"required"`
|
||||||
Name string `json:"name" validate:"required"`
|
Name string `json:"name" validate:"required"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type SubscribePlan struct {
|
|
||||||
ID string `json:"id"`
|
|
||||||
Code string `json:"code"`
|
|
||||||
Name string `json:"name"`
|
|
||||||
}
|
|
||||||
|
|||||||
@ -1,8 +0,0 @@
|
|||||||
package subscribeplandm
|
|
||||||
|
|
||||||
// refactored
|
|
||||||
type SubscribePlan struct {
|
|
||||||
ID string `json:"id"`
|
|
||||||
Code string `json:"code"`
|
|
||||||
Name string `json:"name"`
|
|
||||||
}
|
|
||||||
@ -1,6 +1,9 @@
|
|||||||
package userdomain
|
package userdomain
|
||||||
|
|
||||||
import subscribedm "legalgo-BE-go/internal/domain/subscribe_model"
|
import (
|
||||||
|
subscribe "legalgo-BE-go/internal/domain/subscribe"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
type User struct {
|
type User struct {
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
@ -9,7 +12,7 @@ type User struct {
|
|||||||
Email string `json:"email"`
|
Email string `json:"email"`
|
||||||
Phone string `json:"phone"`
|
Phone string `json:"phone"`
|
||||||
|
|
||||||
Subscribe subscribedm.Subscribe `gorm:"foreignKey:SubscribeID" json:"subscribe"`
|
Subscribe subscribe.Subscribe `gorm:"foreignKey:SubscribeID" json:"subscribe"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserRegister struct {
|
type UserRegister struct {
|
||||||
@ -24,7 +27,7 @@ type UserProfile struct {
|
|||||||
Email string `json:"email"`
|
Email string `json:"email"`
|
||||||
Phone string `json:"phone"`
|
Phone string `json:"phone"`
|
||||||
|
|
||||||
Subscribe subscribedm.Subscribe `gorm:"foreignKey:SubscribeID" json:"subscribe"`
|
Subscribe subscribe.Subscribe `gorm:"foreignKey:SubscribeID" json:"subscribe"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserLogin struct {
|
type UserLogin struct {
|
||||||
@ -33,5 +36,10 @@ type UserLogin struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type UserSubsUpdate struct {
|
type UserSubsUpdate struct {
|
||||||
Status string `json:"status"`
|
ID string `json:"id"`
|
||||||
|
Status string `json:"status"`
|
||||||
|
SubscribePlanID string `json:"subscribe_plan_id"`
|
||||||
|
AutoRenew bool `json:"auto_renew"`
|
||||||
|
StartDate time.Time `json:"start_date"`
|
||||||
|
EndDate *time.Time `json:"end_date"`
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,14 +0,0 @@
|
|||||||
package authsvc
|
|
||||||
|
|
||||||
import (
|
|
||||||
userdomain "legalgo-BE-go/internal/domain/user"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (as *impl) GetUserProfile(email string) (*userdomain.UserProfile, error) {
|
|
||||||
user, err := as.userRepo.GetUserProfile(email)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return user, nil
|
|
||||||
}
|
|
||||||
@ -3,7 +3,7 @@ package authsvc
|
|||||||
import (
|
import (
|
||||||
staffrepository "legalgo-BE-go/internal/accessor/staff"
|
staffrepository "legalgo-BE-go/internal/accessor/staff"
|
||||||
subscriberepository "legalgo-BE-go/internal/accessor/subscribe"
|
subscriberepository "legalgo-BE-go/internal/accessor/subscribe"
|
||||||
subscribeplanrepository "legalgo-BE-go/internal/accessor/subscribeplan"
|
subscribeplanrepository "legalgo-BE-go/internal/accessor/subscribe_plan"
|
||||||
userrepository "legalgo-BE-go/internal/accessor/user"
|
userrepository "legalgo-BE-go/internal/accessor/user"
|
||||||
staffdomain "legalgo-BE-go/internal/domain/staff"
|
staffdomain "legalgo-BE-go/internal/domain/staff"
|
||||||
userdomain "legalgo-BE-go/internal/domain/user"
|
userdomain "legalgo-BE-go/internal/domain/user"
|
||||||
@ -12,8 +12,8 @@ import (
|
|||||||
type impl struct {
|
type impl struct {
|
||||||
staffRepo staffrepository.Staff
|
staffRepo staffrepository.Staff
|
||||||
userRepo userrepository.User
|
userRepo userrepository.User
|
||||||
subsRepo subscriberepository.SubsIntf
|
subsRepo subscriberepository.Subscribe
|
||||||
subsPlanRepo subscribeplanrepository.SubsPlanIntf
|
subsPlanRepo subscribeplanrepository.SubscribePlan
|
||||||
}
|
}
|
||||||
|
|
||||||
type Auth interface {
|
type Auth interface {
|
||||||
@ -22,17 +22,13 @@ type Auth interface {
|
|||||||
GetStaffProfile(string) (*staffdomain.StaffProfile, error)
|
GetStaffProfile(string) (*staffdomain.StaffProfile, error)
|
||||||
GetUsers() ([]userdomain.UserProfile, error)
|
GetUsers() ([]userdomain.UserProfile, error)
|
||||||
UpdateStaff(staffdomain.Staff) error
|
UpdateStaff(staffdomain.Staff) error
|
||||||
|
|
||||||
LoginAsUser(userdomain.UserLogin) (string, error)
|
|
||||||
RegisterUser(userdomain.UserRegister) (string, error)
|
|
||||||
GetUserProfile(string) (*userdomain.UserProfile, error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(
|
func New(
|
||||||
staffRepo staffrepository.Staff,
|
staffRepo staffrepository.Staff,
|
||||||
userRepo userrepository.User,
|
userRepo userrepository.User,
|
||||||
subsRepo subscriberepository.SubsIntf,
|
subsRepo subscriberepository.Subscribe,
|
||||||
subsPlanRepo subscribeplanrepository.SubsPlanIntf,
|
subsPlanRepo subscribeplanrepository.SubscribePlan,
|
||||||
) Auth {
|
) Auth {
|
||||||
return &impl{
|
return &impl{
|
||||||
staffRepo: staffRepo,
|
staffRepo: staffRepo,
|
||||||
|
|||||||
@ -16,7 +16,7 @@ func (sv *impl) LoginAsStaff(spec staffdomain.StaffLogin) (string, error) {
|
|||||||
return "", errors.New(err.Error())
|
return "", errors.New(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
matchPassword := ComparePassword(staff.Password, spec.Password)
|
matchPassword := utils.ComparePassword(staff.Password, spec.Password)
|
||||||
if !matchPassword {
|
if !matchPassword {
|
||||||
return "", errors.New("wrong password")
|
return "", errors.New("wrong password")
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,7 +15,7 @@ func (a *impl) RegisterStaff(spec staffdomain.StaffRegister) (string, error) {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
return "", errors.New("this email address is already in use")
|
return "", errors.New("this email address is already in use")
|
||||||
}
|
}
|
||||||
hashedPwd, err := HashPassword(spec.Password)
|
hashedPwd, err := utils.HashPassword(spec.Password)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import (
|
|||||||
subscribesvc "legalgo-BE-go/internal/services/subscribe"
|
subscribesvc "legalgo-BE-go/internal/services/subscribe"
|
||||||
subscribeplansvc "legalgo-BE-go/internal/services/subscribe_plan"
|
subscribeplansvc "legalgo-BE-go/internal/services/subscribe_plan"
|
||||||
tagsvc "legalgo-BE-go/internal/services/tag"
|
tagsvc "legalgo-BE-go/internal/services/tag"
|
||||||
|
usersvc "legalgo-BE-go/internal/services/user"
|
||||||
|
|
||||||
"go.uber.org/fx"
|
"go.uber.org/fx"
|
||||||
)
|
)
|
||||||
@ -21,5 +22,6 @@ var Module = fx.Module("services",
|
|||||||
categorysvc.New,
|
categorysvc.New,
|
||||||
newssvc.New,
|
newssvc.New,
|
||||||
oss.NewOSSService,
|
oss.NewOSSService,
|
||||||
|
usersvc.New,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|||||||
@ -6,14 +6,14 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type impl struct {
|
type impl struct {
|
||||||
subsRepo subscriberepository.SubsIntf
|
subsRepo subscriberepository.Subscribe
|
||||||
}
|
}
|
||||||
|
|
||||||
type Subscribe interface {
|
type Subscribe interface {
|
||||||
Create(string) (string, error)
|
Create(string) (string, error)
|
||||||
Update(string, userdomain.UserSubsUpdate) error
|
Update(userdomain.UserSubsUpdate) error
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(subsRepo subscriberepository.SubsIntf) Subscribe {
|
func New(subsRepo subscriberepository.Subscribe) Subscribe {
|
||||||
return &impl{subsRepo}
|
return &impl{subsRepo}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,20 @@
|
|||||||
package subscribesvc
|
package subscribesvc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
subscribedomain "legalgo-BE-go/internal/domain/subscribe"
|
||||||
userdomain "legalgo-BE-go/internal/domain/user"
|
userdomain "legalgo-BE-go/internal/domain/user"
|
||||||
|
timeutils "legalgo-BE-go/internal/utilities/time_utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (i *impl) Update(id string, spec userdomain.UserSubsUpdate) error {
|
func (i *impl) Update(spec userdomain.UserSubsUpdate) error {
|
||||||
return nil
|
newSpec := subscribedomain.Subscribe{
|
||||||
|
ID: spec.ID,
|
||||||
|
AutoRenew: spec.AutoRenew,
|
||||||
|
StartDate: timeutils.Now(),
|
||||||
|
EndDate: spec.EndDate,
|
||||||
|
Status: spec.Status,
|
||||||
|
SubscribePlanID: spec.SubscribePlanID,
|
||||||
|
UpdatedAt: timeutils.Now(),
|
||||||
|
}
|
||||||
|
return i.subsRepo.Update(newSpec)
|
||||||
}
|
}
|
||||||
|
|||||||
16
internal/services/subscribe_plan/create.go
Normal file
16
internal/services/subscribe_plan/create.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package subscribeplansvc
|
||||||
|
|
||||||
|
import (
|
||||||
|
subscribeplandomain "legalgo-BE-go/internal/domain/subscribe_plan"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (sb *impl) Create(spec subscribeplandomain.SubscribePlanReq) error {
|
||||||
|
data := subscribeplandomain.SubscribePlan{
|
||||||
|
ID: uuid.NewString(),
|
||||||
|
Code: spec.Code,
|
||||||
|
Name: spec.Name,
|
||||||
|
}
|
||||||
|
return sb.subsRepo.Create(data)
|
||||||
|
}
|
||||||
@ -1,7 +0,0 @@
|
|||||||
package subscribeplansvc
|
|
||||||
|
|
||||||
import subscribeplandomain "legalgo-BE-go/internal/domain/subscribe_plan"
|
|
||||||
|
|
||||||
func (sb *impl) CreatePlan(spec subscribeplandomain.SubscribePlanReq) error {
|
|
||||||
return sb.subsAccs.Create(spec)
|
|
||||||
}
|
|
||||||
5
internal/services/subscribe_plan/delete.go
Normal file
5
internal/services/subscribe_plan/delete.go
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package subscribeplansvc
|
||||||
|
|
||||||
|
func (i *impl) Delete(id string) error {
|
||||||
|
return i.subsRepo.Delete(id)
|
||||||
|
}
|
||||||
@ -5,5 +5,5 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (s *impl) GetAllPlan() ([]subscribeplandomain.SubscribePlan, error) {
|
func (s *impl) GetAllPlan() ([]subscribeplandomain.SubscribePlan, error) {
|
||||||
return s.subsAccs.GetAll()
|
return s.subsRepo.GetAll()
|
||||||
}
|
}
|
||||||
@ -1,21 +1,23 @@
|
|||||||
package subscribeplansvc
|
package subscribeplansvc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
subscribeplanrepository "legalgo-BE-go/internal/accessor/subscribeplan"
|
subscribeplanrepository "legalgo-BE-go/internal/accessor/subscribe_plan"
|
||||||
subscribeplandomain "legalgo-BE-go/internal/domain/subscribe_plan"
|
subscribeplandomain "legalgo-BE-go/internal/domain/subscribe_plan"
|
||||||
)
|
)
|
||||||
|
|
||||||
type impl struct {
|
type impl struct {
|
||||||
subsAccs subscribeplanrepository.SubsPlanIntf
|
subsRepo subscribeplanrepository.SubscribePlan
|
||||||
}
|
}
|
||||||
|
|
||||||
type SubscribePlan interface {
|
type SubscribePlan interface {
|
||||||
CreatePlan(subscribeplandomain.SubscribePlanReq) error
|
Create(subscribeplandomain.SubscribePlanReq) error
|
||||||
|
Update(string, subscribeplandomain.SubscribePlanUpdate) error
|
||||||
GetAllPlan() ([]subscribeplandomain.SubscribePlan, error)
|
GetAllPlan() ([]subscribeplandomain.SubscribePlan, error)
|
||||||
|
Delete(string) error
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(
|
func New(
|
||||||
subsAccs subscribeplanrepository.SubsPlanIntf,
|
subsAccs subscribeplanrepository.SubscribePlan,
|
||||||
) SubscribePlan {
|
) SubscribePlan {
|
||||||
return &impl{subsAccs}
|
return &impl{subsAccs}
|
||||||
}
|
}
|
||||||
|
|||||||
16
internal/services/subscribe_plan/update.go
Normal file
16
internal/services/subscribe_plan/update.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package subscribeplansvc
|
||||||
|
|
||||||
|
import (
|
||||||
|
subscribeplandomain "legalgo-BE-go/internal/domain/subscribe_plan"
|
||||||
|
timeutils "legalgo-BE-go/internal/utilities/time_utils"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (i *impl) Update(id string, spec subscribeplandomain.SubscribePlanUpdate) error {
|
||||||
|
newData := subscribeplandomain.SubscribePlan{
|
||||||
|
ID: id,
|
||||||
|
Code: spec.Code,
|
||||||
|
Name: spec.Name,
|
||||||
|
UpdatedAt: timeutils.Now(),
|
||||||
|
}
|
||||||
|
return i.subsRepo.Update(newData)
|
||||||
|
}
|
||||||
@ -1,9 +0,0 @@
|
|||||||
package tagsvc
|
|
||||||
|
|
||||||
import (
|
|
||||||
tagdomain "legalgo-BE-go/internal/domain/tag"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (i *impl) GetAllModel() ([]tagdomain.Tag, error) {
|
|
||||||
return i.tagRepo.GetAll()
|
|
||||||
}
|
|
||||||
@ -12,7 +12,6 @@ type impl struct {
|
|||||||
type Tag interface {
|
type Tag interface {
|
||||||
Create(tagdomain.TagReq) error
|
Create(tagdomain.TagReq) error
|
||||||
GetAll() ([]tagdomain.Tag, error)
|
GetAll() ([]tagdomain.Tag, error)
|
||||||
GetAllModel() ([]tagdomain.Tag, error)
|
|
||||||
Update(string, tagdomain.TagReq) error
|
Update(string, tagdomain.TagReq) error
|
||||||
Delete(string) error
|
Delete(string) error
|
||||||
}
|
}
|
||||||
|
|||||||
14
internal/services/user/get_user.go
Normal file
14
internal/services/user/get_user.go
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
package usersvc
|
||||||
|
|
||||||
|
import (
|
||||||
|
userdomain "legalgo-BE-go/internal/domain/user"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (i *impl) GetUserProfile(email string) (*userdomain.UserProfile, error) {
|
||||||
|
user, err := i.userRepo.GetUserProfile(email)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return user, nil
|
||||||
|
}
|
||||||
32
internal/services/user/impl.go
Normal file
32
internal/services/user/impl.go
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
package usersvc
|
||||||
|
|
||||||
|
import (
|
||||||
|
subscriberepository "legalgo-BE-go/internal/accessor/subscribe"
|
||||||
|
subscribeplanrepository "legalgo-BE-go/internal/accessor/subscribe_plan"
|
||||||
|
userrepository "legalgo-BE-go/internal/accessor/user"
|
||||||
|
userdomain "legalgo-BE-go/internal/domain/user"
|
||||||
|
)
|
||||||
|
|
||||||
|
type impl struct {
|
||||||
|
subsRepo subscriberepository.Subscribe
|
||||||
|
userRepo userrepository.User
|
||||||
|
subsPlanRepo subscribeplanrepository.SubscribePlan
|
||||||
|
}
|
||||||
|
|
||||||
|
type User interface {
|
||||||
|
GetUserProfile(string) (*userdomain.UserProfile, error)
|
||||||
|
LoginAsUser(userdomain.UserLogin) (string, error)
|
||||||
|
RegisterUser(userdomain.UserRegister) (string, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
func New(
|
||||||
|
subsRepo subscriberepository.Subscribe,
|
||||||
|
userRepo userrepository.User,
|
||||||
|
subsPlanRepo subscribeplanrepository.SubscribePlan,
|
||||||
|
) User {
|
||||||
|
return &impl{
|
||||||
|
subsRepo,
|
||||||
|
userRepo,
|
||||||
|
subsPlanRepo,
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package authsvc
|
package usersvc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
@ -10,13 +10,13 @@ import (
|
|||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (a *impl) LoginAsUser(spec userdomain.UserLogin) (string, error) {
|
func (i *impl) LoginAsUser(spec userdomain.UserLogin) (string, error) {
|
||||||
user, err := a.userRepo.GetUserByEmail(spec.Email)
|
user, err := i.userRepo.GetUserByEmail(spec.Email)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errors.New(err.Error())
|
return "", errors.New(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
matchPassword := ComparePassword(user.Password, spec.Password)
|
matchPassword := utils.ComparePassword(user.Password, spec.Password)
|
||||||
if !matchPassword {
|
if !matchPassword {
|
||||||
return "", errors.New("wrong password")
|
return "", errors.New("wrong password")
|
||||||
}
|
}
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package authsvc
|
package usersvc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
@ -10,15 +10,15 @@ import (
|
|||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (a *impl) RegisterUser(spec userdomain.UserRegister) (string, error) {
|
func (i *impl) RegisterUser(spec userdomain.UserRegister) (string, error) {
|
||||||
_, err := a.userRepo.GetUserByEmail(spec.Email)
|
_, err := i.userRepo.GetUserByEmail(spec.Email)
|
||||||
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return "", errors.New("this email address is already in use")
|
return "", errors.New("this email address is already in use")
|
||||||
}
|
}
|
||||||
|
|
||||||
if spec.SubscribePlanID == "" {
|
if spec.SubscribePlanID == "" {
|
||||||
subsPlan, err := a.subsPlanRepo.GetDefault()
|
subsPlan, err := i.subsPlanRepo.GetDefault()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@ -26,17 +26,17 @@ func (a *impl) RegisterUser(spec userdomain.UserRegister) (string, error) {
|
|||||||
spec.SubscribePlanID = subsPlan.ID
|
spec.SubscribePlanID = subsPlan.ID
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = a.subsPlanRepo.GetByID(spec.SubscribePlanID)
|
_, err = i.subsPlanRepo.GetByID(spec.SubscribePlanID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errors.New(err.Error())
|
return "", errors.New(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
subsId, err := a.subsRepo.Create(spec.SubscribePlanID)
|
subsId, err := i.subsRepo.Create(spec.SubscribePlanID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
hashedPwd, err := HashPassword(spec.Password)
|
hashedPwd, err := utils.HashPassword(spec.Password)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@ -49,7 +49,7 @@ func (a *impl) RegisterUser(spec userdomain.UserRegister) (string, error) {
|
|||||||
Phone: spec.Phone,
|
Phone: spec.Phone,
|
||||||
}
|
}
|
||||||
|
|
||||||
err = a.userRepo.CreateUser(user)
|
err = i.userRepo.CreateUser(user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errors.New(err.Error())
|
return "", errors.New(err.Error())
|
||||||
}
|
}
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package authsvc
|
package utils
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
Loading…
x
Reference in New Issue
Block a user