feat: update staff data
This commit is contained in:
parent
1297c71200
commit
11bc19360c
@ -2,6 +2,7 @@ package staffrepository
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
staffdomain "legalgo-BE-go/internal/domain/staff"
|
staffdomain "legalgo-BE-go/internal/domain/staff"
|
||||||
|
|
||||||
@ -12,12 +13,12 @@ func (sr *accessor) GetStaffByEmail(email string) (*staffdomain.Staff, error) {
|
|||||||
var staff staffdomain.Staff
|
var staff staffdomain.Staff
|
||||||
|
|
||||||
if email == "" {
|
if email == "" {
|
||||||
return nil, errors.New("email is required")
|
return nil, fmt.Errorf("email is required")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := sr.db.First(&staff, "email = ?", email).Error; err != nil {
|
if err := sr.db.First(&staff, "email = ?", email).Error; err != nil {
|
||||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
return nil, errors.New("staff not found")
|
return nil, fmt.Errorf("staff not found")
|
||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package staffrepository
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
staffdomain "legalgo-BE-go/internal/domain/staff"
|
staffdomain "legalgo-BE-go/internal/domain/staff"
|
||||||
|
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
@ -11,12 +12,12 @@ func (sr *accessor) GetStaffByID(ID string) (*staffdomain.Staff, error) {
|
|||||||
var staff staffdomain.Staff
|
var staff staffdomain.Staff
|
||||||
|
|
||||||
if ID == "" {
|
if ID == "" {
|
||||||
return nil, errors.New("id is required")
|
return nil, fmt.Errorf("id is required")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := sr.db.First(&staff, "id = ? ", ID).Error; err != nil {
|
if err := sr.db.First(&staff, "id = ? ", ID).Error; err != nil {
|
||||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
return nil, errors.New("staff not found")
|
return nil, fmt.Errorf("staff not found")
|
||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,16 +2,15 @@ package staffrepository
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
staffdomain "legalgo-BE-go/internal/domain/staff"
|
staffdomain "legalgo-BE-go/internal/domain/staff"
|
||||||
"legalgo-BE-go/internal/utilities/utils"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func (ur *accessor) Update(spec staffdomain.Staff) error {
|
func (ur *accessor) Update(spec staffdomain.Staff) error {
|
||||||
val, err := utils.StructToMap(spec)
|
// val, err := utils.StructToMap(spec)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
|
|
||||||
if err := ur.db.Model(&staffdomain.Staff{}).Where("id = ?", spec.ID).Updates(val).Error; err != nil {
|
if err := ur.db.Model(&staffdomain.Staff{}).Where("id = ?", spec.ID).Updates(spec).Error; err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package subscribeplanrepository
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
subscribeplandomain "legalgo-BE-go/internal/domain/subscribe_plan"
|
subscribeplandomain "legalgo-BE-go/internal/domain/subscribe_plan"
|
||||||
|
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
@ -12,7 +13,7 @@ func (s *accessor) GetByID(id string) (*subscribeplandomain.SubscribePlan, error
|
|||||||
|
|
||||||
if err := s.db.First(&subscribePlan, "id = ? ", id).Error; err != nil {
|
if err := s.db.First(&subscribePlan, "id = ? ", id).Error; err != nil {
|
||||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
return subscribePlan, errors.New("subscribe plan not found")
|
return subscribePlan, fmt.Errorf("subscribe plan not found")
|
||||||
}
|
}
|
||||||
return subscribePlan, err
|
return subscribePlan, err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package userrepository
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
userdomain "legalgo-BE-go/internal/domain/user"
|
userdomain "legalgo-BE-go/internal/domain/user"
|
||||||
|
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
@ -11,12 +12,12 @@ func (ur *accessor) GetUserByEmail(email string) (*userdomain.User, error) {
|
|||||||
var user *userdomain.User
|
var user *userdomain.User
|
||||||
|
|
||||||
if email == "" {
|
if email == "" {
|
||||||
return nil, errors.New("email is empty")
|
return nil, fmt.Errorf("email is empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := ur.db.First(&user, "email = ?", email).Error; err != nil {
|
if err := ur.db.First(&user, "email = ?", email).Error; err != nil {
|
||||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
return nil, errors.New("user not found")
|
return nil, fmt.Errorf("user not found")
|
||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,8 +1,7 @@
|
|||||||
package userrepository
|
package userrepository
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"fmt"
|
||||||
|
|
||||||
userdomain "legalgo-BE-go/internal/domain/user"
|
userdomain "legalgo-BE-go/internal/domain/user"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -10,7 +9,7 @@ func (ur *accessor) GetUserByID(id string) (*userdomain.User, error) {
|
|||||||
var user userdomain.User
|
var user userdomain.User
|
||||||
|
|
||||||
if id == "" {
|
if id == "" {
|
||||||
return nil, errors.New("id is empty")
|
return nil, fmt.Errorf("id is empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := ur.db.
|
if err := ur.db.
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package userrepository
|
package userrepository
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"fmt"
|
||||||
userdomain "legalgo-BE-go/internal/domain/user"
|
userdomain "legalgo-BE-go/internal/domain/user"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -9,7 +9,7 @@ func (ur *accessor) GetUserProfile(email string) (*userdomain.UserProfile, error
|
|||||||
var user *userdomain.User
|
var user *userdomain.User
|
||||||
|
|
||||||
if email == "" {
|
if email == "" {
|
||||||
return nil, errors.New("email is empty")
|
return nil, fmt.Errorf("email is empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := ur.db.
|
if err := ur.db.
|
||||||
|
|||||||
@ -4,8 +4,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
authmiddleware "legalgo-BE-go/internal/api/http/middleware/auth"
|
authmiddleware "legalgo-BE-go/internal/api/http/middleware/auth"
|
||||||
newsdomain "legalgo-BE-go/internal/domain/news"
|
newsdomain "legalgo-BE-go/internal/domain/news"
|
||||||
authsvc "legalgo-BE-go/internal/services/auth"
|
|
||||||
newssvc "legalgo-BE-go/internal/services/news"
|
newssvc "legalgo-BE-go/internal/services/news"
|
||||||
|
staffsvc "legalgo-BE-go/internal/services/staffsvc"
|
||||||
"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 Update(
|
func Update(
|
||||||
router chi.Router,
|
router chi.Router,
|
||||||
newsSvc newssvc.News,
|
newsSvc newssvc.News,
|
||||||
authSvc authsvc.Auth,
|
authSvc staffsvc.Auth,
|
||||||
) {
|
) {
|
||||||
router.With(authmiddleware.Authorize()).
|
router.With(authmiddleware.Authorize()).
|
||||||
Put("/news/{news_id}/update", func(w http.ResponseWriter, r *http.Request) {
|
Put("/news/{news_id}/update", func(w http.ResponseWriter, r *http.Request) {
|
||||||
@ -48,7 +48,7 @@ func Update(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
staff, err := authSvc.GetStaffProfile(destructedToken.Email)
|
staff, err := authSvc.GetProfile(destructedToken.Email)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
response.ResponseWithErrorCode(
|
response.ResponseWithErrorCode(
|
||||||
ctx,
|
ctx,
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import (
|
|||||||
categoryhttp "legalgo-BE-go/internal/api/http/category"
|
categoryhttp "legalgo-BE-go/internal/api/http/category"
|
||||||
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/staff"
|
||||||
subscribehttp "legalgo-BE-go/internal/api/http/subscribe"
|
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"
|
||||||
|
|||||||
@ -2,7 +2,7 @@ package staffhttp
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
authmiddleware "legalgo-BE-go/internal/api/http/middleware/auth"
|
authmiddleware "legalgo-BE-go/internal/api/http/middleware/auth"
|
||||||
authsvc "legalgo-BE-go/internal/services/auth"
|
staffsvc "legalgo-BE-go/internal/services/staffsvc"
|
||||||
"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"
|
||||||
@ -12,7 +12,7 @@ import (
|
|||||||
|
|
||||||
func GetUsers(
|
func GetUsers(
|
||||||
router chi.Router,
|
router chi.Router,
|
||||||
authSvc authsvc.Auth,
|
authSvc staffsvc.Auth,
|
||||||
) {
|
) {
|
||||||
router.With(authmiddleware.Authorize()).Get("/staff/users", func(w http.ResponseWriter, r *http.Request) {
|
router.With(authmiddleware.Authorize()).Get("/staff/users", func(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
@ -5,7 +5,7 @@ import (
|
|||||||
|
|
||||||
responsedomain "legalgo-BE-go/internal/domain/reponse"
|
responsedomain "legalgo-BE-go/internal/domain/reponse"
|
||||||
staffdomain "legalgo-BE-go/internal/domain/staff"
|
staffdomain "legalgo-BE-go/internal/domain/staff"
|
||||||
authsvc "legalgo-BE-go/internal/services/auth"
|
staffsvc "legalgo-BE-go/internal/services/staffsvc"
|
||||||
"legalgo-BE-go/internal/utilities/response"
|
"legalgo-BE-go/internal/utilities/response"
|
||||||
"legalgo-BE-go/internal/utilities/utils"
|
"legalgo-BE-go/internal/utilities/utils"
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ import (
|
|||||||
|
|
||||||
func Login(
|
func Login(
|
||||||
router chi.Router,
|
router chi.Router,
|
||||||
authSvc authsvc.Auth,
|
authSvc staffsvc.Auth,
|
||||||
validate *validator.Validate,
|
validate *validator.Validate,
|
||||||
rdb *redis.Client,
|
rdb *redis.Client,
|
||||||
) {
|
) {
|
||||||
@ -49,7 +49,7 @@ func Login(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
token, err := authSvc.LoginAsStaff(spec)
|
token, err := authSvc.Login(spec)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
response.ResponseWithErrorCode(
|
response.ResponseWithErrorCode(
|
||||||
ctx,
|
ctx,
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package staffhttp
|
package staffhttp
|
||||||
|
|
||||||
import (
|
import (
|
||||||
authsvc "legalgo-BE-go/internal/services/auth"
|
staffsvc "legalgo-BE-go/internal/services/staffsvc"
|
||||||
"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,
|
authSvc staffsvc.Auth,
|
||||||
) {
|
) {
|
||||||
router.Get("/staff/profile", func(w http.ResponseWriter, r *http.Request) {
|
router.Get("/staff/profile", func(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
@ -28,7 +28,7 @@ func GetProfile(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
staffProfile, err := authSvc.GetStaffProfile(destructedToken.Email)
|
staffProfile, err := authSvc.GetProfile(destructedToken.Email)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
response.ResponseWithErrorCode(
|
response.ResponseWithErrorCode(
|
||||||
ctx,
|
ctx,
|
||||||
@ -5,7 +5,7 @@ import (
|
|||||||
|
|
||||||
responsedomain "legalgo-BE-go/internal/domain/reponse"
|
responsedomain "legalgo-BE-go/internal/domain/reponse"
|
||||||
staffdomain "legalgo-BE-go/internal/domain/staff"
|
staffdomain "legalgo-BE-go/internal/domain/staff"
|
||||||
authsvc "legalgo-BE-go/internal/services/auth"
|
staffsvc "legalgo-BE-go/internal/services/staffsvc"
|
||||||
"legalgo-BE-go/internal/utilities/response"
|
"legalgo-BE-go/internal/utilities/response"
|
||||||
"legalgo-BE-go/internal/utilities/utils"
|
"legalgo-BE-go/internal/utilities/utils"
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ import (
|
|||||||
func Register(
|
func Register(
|
||||||
router chi.Router,
|
router chi.Router,
|
||||||
validate *validator.Validate,
|
validate *validator.Validate,
|
||||||
authSvc authsvc.Auth,
|
authSvc staffsvc.Auth,
|
||||||
rdb *redis.Client,
|
rdb *redis.Client,
|
||||||
) {
|
) {
|
||||||
router.Post("/staff/register", func(w http.ResponseWriter, r *http.Request) {
|
router.Post("/staff/register", func(w http.ResponseWriter, r *http.Request) {
|
||||||
@ -49,7 +49,7 @@ func Register(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
token, err := authSvc.RegisterStaff(spec)
|
token, err := authSvc.Register(spec)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
response.ResponseWithErrorCode(
|
response.ResponseWithErrorCode(
|
||||||
ctx,
|
ctx,
|
||||||
@ -1,9 +1,8 @@
|
|||||||
package staffhttp
|
package staffhttp
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
staffdomain "legalgo-BE-go/internal/domain/staff"
|
staffdomain "legalgo-BE-go/internal/domain/staff"
|
||||||
authsvc "legalgo-BE-go/internal/services/auth"
|
staffsvc "legalgo-BE-go/internal/services/staffsvc"
|
||||||
"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"
|
||||||
@ -13,25 +12,25 @@ import (
|
|||||||
|
|
||||||
func Update(
|
func Update(
|
||||||
router chi.Router,
|
router chi.Router,
|
||||||
authSvc authsvc.Auth,
|
authSvc staffsvc.Auth,
|
||||||
) {
|
) {
|
||||||
router.Patch("/staff/{id}/update", func(w http.ResponseWriter, r *http.Request) {
|
router.Put("/staff/update", func(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
|
||||||
id := chi.URLParam(r, "id")
|
destructedToken, err := utils.GetTokenDetail(r)
|
||||||
if id == "" {
|
if err != nil {
|
||||||
response.ResponseWithErrorCode(
|
response.ResponseWithErrorCode(
|
||||||
ctx,
|
ctx,
|
||||||
w,
|
w,
|
||||||
errors.New("provided id is empty"),
|
err,
|
||||||
response.ErrBadRequest.Code,
|
response.ErrBadRequest.Code,
|
||||||
response.ErrBadRequest.HttpCode,
|
response.ErrBadRequest.HttpCode,
|
||||||
"required params is not provided",
|
err.Error(),
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var spec staffdomain.StaffRegister
|
var spec staffdomain.StaffUpdate
|
||||||
|
|
||||||
if err := utils.UnmarshalBody(r, &spec); err != nil {
|
if err := utils.UnmarshalBody(r, &spec); err != nil {
|
||||||
response.ResponseWithErrorCode(
|
response.ResponseWithErrorCode(
|
||||||
@ -45,14 +44,7 @@ func Update(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
staff := staffdomain.Staff{
|
if err := authSvc.Update(destructedToken.ID, spec); err != nil {
|
||||||
ID: id,
|
|
||||||
Email: spec.Email,
|
|
||||||
Password: spec.Password,
|
|
||||||
Name: spec.Name,
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := authSvc.UpdateStaff(staff); err != nil {
|
|
||||||
response.ResponseWithErrorCode(
|
response.ResponseWithErrorCode(
|
||||||
ctx,
|
ctx,
|
||||||
w,
|
w,
|
||||||
@ -4,4 +4,5 @@ type AuthToken struct {
|
|||||||
Email string
|
Email string
|
||||||
SessionID string
|
SessionID string
|
||||||
Role string
|
Role string
|
||||||
|
ID string
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,6 +15,12 @@ type StaffRegister struct {
|
|||||||
ProfilePicture string `json:"profile_picture"`
|
ProfilePicture string `json:"profile_picture"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type StaffUpdate struct {
|
||||||
|
Email string `json:"email" validate:"required"`
|
||||||
|
Name string `json:"name" validate:"required"`
|
||||||
|
ProfilePicture string `json:"profile_picture"`
|
||||||
|
}
|
||||||
|
|
||||||
type StaffProfile struct {
|
type StaffProfile struct {
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
|
|||||||
@ -10,4 +10,5 @@ const (
|
|||||||
ISSUED_AT JWTClaim = "iat"
|
ISSUED_AT JWTClaim = "iat"
|
||||||
RESOURCES JWTClaim = "resources"
|
RESOURCES JWTClaim = "resources"
|
||||||
ROLE JWTClaim = "role"
|
ROLE JWTClaim = "role"
|
||||||
|
ID JWTClaim = "skb"
|
||||||
)
|
)
|
||||||
|
|||||||
@ -1,17 +0,0 @@
|
|||||||
package authsvc
|
|
||||||
|
|
||||||
import (
|
|
||||||
staffdomain "legalgo-BE-go/internal/domain/staff"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (as *impl) UpdateStaff(spec staffdomain.Staff) error {
|
|
||||||
if _, err := as.staffRepo.GetStaffByID(spec.ID); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := as.staffRepo.Update(spec); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
@ -2,10 +2,10 @@ package services
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
adssvc "legalgo-BE-go/internal/services/ads"
|
adssvc "legalgo-BE-go/internal/services/ads"
|
||||||
serviceauth "legalgo-BE-go/internal/services/auth"
|
|
||||||
categorysvc "legalgo-BE-go/internal/services/category"
|
categorysvc "legalgo-BE-go/internal/services/category"
|
||||||
newssvc "legalgo-BE-go/internal/services/news"
|
newssvc "legalgo-BE-go/internal/services/news"
|
||||||
"legalgo-BE-go/internal/services/oss"
|
"legalgo-BE-go/internal/services/oss"
|
||||||
|
staffsvc "legalgo-BE-go/internal/services/staffsvc"
|
||||||
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"
|
||||||
@ -16,7 +16,7 @@ import (
|
|||||||
|
|
||||||
var Module = fx.Module("services",
|
var Module = fx.Module("services",
|
||||||
fx.Provide(
|
fx.Provide(
|
||||||
serviceauth.New,
|
staffsvc.New,
|
||||||
subscribeplansvc.New,
|
subscribeplansvc.New,
|
||||||
subscribesvc.New,
|
subscribesvc.New,
|
||||||
tagsvc.New,
|
tagsvc.New,
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
package authsvc
|
package staffsvc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
staffdomain "legalgo-BE-go/internal/domain/staff"
|
staffdomain "legalgo-BE-go/internal/domain/staff"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (as *impl) GetStaffProfile(email string) (*staffdomain.StaffProfile, error) {
|
func (as *impl) GetProfile(email string) (*staffdomain.StaffProfile, error) {
|
||||||
staff, err := as.staffRepo.GetStaffByEmail(email)
|
staff, err := as.staffRepo.GetStaffByEmail(email)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package authsvc
|
package staffsvc
|
||||||
|
|
||||||
import userdomain "legalgo-BE-go/internal/domain/user"
|
import userdomain "legalgo-BE-go/internal/domain/user"
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package authsvc
|
package staffsvc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
staffrepository "legalgo-BE-go/internal/accessor/staff"
|
staffrepository "legalgo-BE-go/internal/accessor/staff"
|
||||||
@ -17,11 +17,11 @@ type impl struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Auth interface {
|
type Auth interface {
|
||||||
LoginAsStaff(staffdomain.StaffLogin) (string, error)
|
Login(staffdomain.StaffLogin) (string, error)
|
||||||
RegisterStaff(staffdomain.StaffRegister) (string, error)
|
Register(staffdomain.StaffRegister) (string, error)
|
||||||
GetStaffProfile(string) (*staffdomain.StaffProfile, error)
|
GetProfile(string) (*staffdomain.StaffProfile, error)
|
||||||
GetUsers() ([]userdomain.UserProfile, error)
|
GetUsers() ([]userdomain.UserProfile, error)
|
||||||
UpdateStaff(staffdomain.Staff) error
|
Update(string, staffdomain.StaffUpdate) error
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(
|
func New(
|
||||||
@ -1,8 +1,7 @@
|
|||||||
package authsvc
|
package staffsvc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"fmt"
|
||||||
|
|
||||||
authdomain "legalgo-BE-go/internal/domain/auth"
|
authdomain "legalgo-BE-go/internal/domain/auth"
|
||||||
staffdomain "legalgo-BE-go/internal/domain/staff"
|
staffdomain "legalgo-BE-go/internal/domain/staff"
|
||||||
"legalgo-BE-go/internal/utilities/utils"
|
"legalgo-BE-go/internal/utilities/utils"
|
||||||
@ -10,26 +9,27 @@ import (
|
|||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (sv *impl) LoginAsStaff(spec staffdomain.StaffLogin) (string, error) {
|
func (sv *impl) Login(spec staffdomain.StaffLogin) (string, error) {
|
||||||
staff, err := sv.staffRepo.GetStaffByEmail(spec.Email)
|
staff, err := sv.staffRepo.GetStaffByEmail(spec.Email)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errors.New(err.Error())
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
matchPassword := utils.ComparePassword(staff.Password, spec.Password)
|
matchPassword := utils.ComparePassword(staff.Password, spec.Password)
|
||||||
if !matchPassword {
|
if !matchPassword {
|
||||||
return "", errors.New("wrong password")
|
return "", fmt.Errorf("wrong password")
|
||||||
}
|
}
|
||||||
|
|
||||||
authToken := authdomain.AuthToken{
|
authToken := authdomain.AuthToken{
|
||||||
Email: staff.Email,
|
Email: staff.Email,
|
||||||
SessionID: uuid.NewString(),
|
SessionID: uuid.NewString(),
|
||||||
Role: "staff",
|
Role: "staff",
|
||||||
|
ID: staff.ID,
|
||||||
}
|
}
|
||||||
|
|
||||||
token, err := utils.GenerateToken(authToken)
|
token, err := utils.GenerateToken(authToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errors.New(err.Error())
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
return token, nil
|
return token, nil
|
||||||
@ -1,8 +1,7 @@
|
|||||||
package authsvc
|
package staffsvc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"fmt"
|
||||||
|
|
||||||
authdomain "legalgo-BE-go/internal/domain/auth"
|
authdomain "legalgo-BE-go/internal/domain/auth"
|
||||||
staffdomain "legalgo-BE-go/internal/domain/staff"
|
staffdomain "legalgo-BE-go/internal/domain/staff"
|
||||||
"legalgo-BE-go/internal/utilities/utils"
|
"legalgo-BE-go/internal/utilities/utils"
|
||||||
@ -10,10 +9,10 @@ import (
|
|||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (a *impl) RegisterStaff(spec staffdomain.StaffRegister) (string, error) {
|
func (a *impl) Register(spec staffdomain.StaffRegister) (string, error) {
|
||||||
_, err := a.staffRepo.GetStaffByEmail(spec.Email)
|
_, err := a.staffRepo.GetStaffByEmail(spec.Email)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return "", errors.New("this email address is already in use")
|
return "", fmt.Errorf("this email address is already in use")
|
||||||
}
|
}
|
||||||
hashedPwd, err := utils.HashPassword(spec.Password)
|
hashedPwd, err := utils.HashPassword(spec.Password)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -30,18 +29,19 @@ func (a *impl) RegisterStaff(spec staffdomain.StaffRegister) (string, error) {
|
|||||||
|
|
||||||
err = a.staffRepo.Create(staff)
|
err = a.staffRepo.Create(staff)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errors.New(err.Error())
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
authToken := authdomain.AuthToken{
|
authToken := authdomain.AuthToken{
|
||||||
Email: staff.Email,
|
Email: staff.Email,
|
||||||
SessionID: uuid.NewString(),
|
SessionID: uuid.NewString(),
|
||||||
Role: "staff",
|
Role: "staff",
|
||||||
|
ID: staff.ID,
|
||||||
}
|
}
|
||||||
|
|
||||||
token, err := utils.GenerateToken(authToken)
|
token, err := utils.GenerateToken(authToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errors.New(err.Error())
|
return "", err
|
||||||
}
|
}
|
||||||
return token, nil
|
return token, nil
|
||||||
}
|
}
|
||||||
24
internal/services/staffsvc/update.go
Normal file
24
internal/services/staffsvc/update.go
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package staffsvc
|
||||||
|
|
||||||
|
import (
|
||||||
|
staffdomain "legalgo-BE-go/internal/domain/staff"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (as *impl) Update(id string, spec staffdomain.StaffUpdate) error {
|
||||||
|
if _, err := as.staffRepo.GetStaffByID(id); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
newSpec := staffdomain.Staff{
|
||||||
|
ID: id,
|
||||||
|
Email: spec.Email,
|
||||||
|
Name: spec.Name,
|
||||||
|
ProfilePicture: spec.ProfilePicture,
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := as.staffRepo.Update(newSpec); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@ -1,8 +1,7 @@
|
|||||||
package usersvc
|
package usersvc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"fmt"
|
||||||
|
|
||||||
authdomain "legalgo-BE-go/internal/domain/auth"
|
authdomain "legalgo-BE-go/internal/domain/auth"
|
||||||
userdomain "legalgo-BE-go/internal/domain/user"
|
userdomain "legalgo-BE-go/internal/domain/user"
|
||||||
"legalgo-BE-go/internal/utilities/utils"
|
"legalgo-BE-go/internal/utilities/utils"
|
||||||
@ -13,23 +12,24 @@ import (
|
|||||||
func (i *impl) LoginAsUser(spec userdomain.UserLogin) (string, error) {
|
func (i *impl) LoginAsUser(spec userdomain.UserLogin) (string, error) {
|
||||||
user, err := i.userRepo.GetUserByEmail(spec.Email)
|
user, err := i.userRepo.GetUserByEmail(spec.Email)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errors.New(err.Error())
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
matchPassword := utils.ComparePassword(user.Password, spec.Password)
|
matchPassword := utils.ComparePassword(user.Password, spec.Password)
|
||||||
if !matchPassword {
|
if !matchPassword {
|
||||||
return "", errors.New("wrong password")
|
return "", fmt.Errorf("wrong password")
|
||||||
}
|
}
|
||||||
|
|
||||||
authToken := authdomain.AuthToken{
|
authToken := authdomain.AuthToken{
|
||||||
Email: user.Email,
|
Email: user.Email,
|
||||||
SessionID: uuid.NewString(),
|
SessionID: uuid.NewString(),
|
||||||
Role: "user",
|
Role: "user",
|
||||||
|
ID: user.ID,
|
||||||
}
|
}
|
||||||
|
|
||||||
token, err := utils.GenerateToken(authToken)
|
token, err := utils.GenerateToken(authToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errors.New(err.Error())
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
return token, nil
|
return token, nil
|
||||||
@ -1,8 +1,7 @@
|
|||||||
package usersvc
|
package usersvc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"fmt"
|
||||||
|
|
||||||
authdomain "legalgo-BE-go/internal/domain/auth"
|
authdomain "legalgo-BE-go/internal/domain/auth"
|
||||||
userdomain "legalgo-BE-go/internal/domain/user"
|
userdomain "legalgo-BE-go/internal/domain/user"
|
||||||
"legalgo-BE-go/internal/utilities/utils"
|
"legalgo-BE-go/internal/utilities/utils"
|
||||||
@ -14,7 +13,7 @@ func (i *impl) RegisterUser(spec userdomain.UserRegister) (string, error) {
|
|||||||
_, err := i.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 "", fmt.Errorf("this email address is already in use")
|
||||||
}
|
}
|
||||||
|
|
||||||
if spec.SubscribePlanID == "" {
|
if spec.SubscribePlanID == "" {
|
||||||
@ -28,7 +27,7 @@ func (i *impl) RegisterUser(spec userdomain.UserRegister) (string, error) {
|
|||||||
|
|
||||||
_, err = i.subsPlanRepo.GetByID(spec.SubscribePlanID)
|
_, err = i.subsPlanRepo.GetByID(spec.SubscribePlanID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errors.New(err.Error())
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
subsId, err := i.subsRepo.Create(spec.SubscribePlanID)
|
subsId, err := i.subsRepo.Create(spec.SubscribePlanID)
|
||||||
@ -51,18 +50,19 @@ func (i *impl) RegisterUser(spec userdomain.UserRegister) (string, error) {
|
|||||||
|
|
||||||
err = i.userRepo.CreateUser(user)
|
err = i.userRepo.CreateUser(user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errors.New(err.Error())
|
return "", fmt.Errorf(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
authToken := authdomain.AuthToken{
|
authToken := authdomain.AuthToken{
|
||||||
Email: user.Email,
|
Email: user.Email,
|
||||||
SessionID: uuid.NewString(),
|
SessionID: uuid.NewString(),
|
||||||
Role: "user",
|
Role: "user",
|
||||||
|
ID: user.ID,
|
||||||
}
|
}
|
||||||
|
|
||||||
token, err := utils.GenerateToken(authToken)
|
token, err := utils.GenerateToken(authToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errors.New(err.Error())
|
return "", fmt.Errorf(err.Error())
|
||||||
}
|
}
|
||||||
return token, nil
|
return token, nil
|
||||||
}
|
}
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package utils
|
package utils
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"fmt"
|
||||||
authdomain "legalgo-BE-go/internal/domain/auth"
|
authdomain "legalgo-BE-go/internal/domain/auth"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
@ -13,16 +13,16 @@ func GetTokenDetail(r *http.Request) (authdomain.AuthToken, error) {
|
|||||||
var data authdomain.AuthToken
|
var data authdomain.AuthToken
|
||||||
|
|
||||||
if authHeader == "" {
|
if authHeader == "" {
|
||||||
return data, errors.New("unauthorized")
|
return data, fmt.Errorf("unauthorized")
|
||||||
}
|
}
|
||||||
|
|
||||||
if !strings.HasPrefix(authHeader, "Bearer") {
|
if !strings.HasPrefix(authHeader, "Bearer") {
|
||||||
return data, errors.New("invalid token")
|
return data, fmt.Errorf("invalid token")
|
||||||
}
|
}
|
||||||
|
|
||||||
token := strings.Split(authHeader, " ")
|
token := strings.Split(authHeader, " ")
|
||||||
if len(token) < 2 {
|
if len(token) < 2 {
|
||||||
return data, errors.New("invalid token")
|
return data, fmt.Errorf("invalid token")
|
||||||
}
|
}
|
||||||
data, err := DestructToken(token[1])
|
data, err := DestructToken(token[1])
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
package utils
|
package utils
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -37,6 +36,7 @@ func GenerateToken(data authdomain.AuthToken) (string, error) {
|
|||||||
string(jwtclaimenum.EMAIL): data.Email,
|
string(jwtclaimenum.EMAIL): data.Email,
|
||||||
string(jwtclaimenum.ROLE): data.Role,
|
string(jwtclaimenum.ROLE): data.Role,
|
||||||
string(jwtclaimenum.SESSION_ID): data.SessionID,
|
string(jwtclaimenum.SESSION_ID): data.SessionID,
|
||||||
|
string(jwtclaimenum.ID): data.ID,
|
||||||
string(jwtclaimenum.EXPIRED_AT): now.Add(time.Minute * time.Duration(config.REDIS_TIMEOUT)).Unix(),
|
string(jwtclaimenum.EXPIRED_AT): now.Add(time.Minute * time.Duration(config.REDIS_TIMEOUT)).Unix(),
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,32 +66,38 @@ func DestructToken(s string) (authdomain.AuthToken, error) {
|
|||||||
claims, ok := token.Claims.(jwt.MapClaims)
|
claims, ok := token.Claims.(jwt.MapClaims)
|
||||||
|
|
||||||
if !ok {
|
if !ok {
|
||||||
return data, errors.New("failed to parse token")
|
return data, fmt.Errorf("failed to parse token")
|
||||||
}
|
}
|
||||||
|
|
||||||
if !token.Valid {
|
if !token.Valid {
|
||||||
return data, errors.New("invalid token")
|
return data, fmt.Errorf("invalid token")
|
||||||
}
|
}
|
||||||
|
|
||||||
email, ok := claims[string(jwtclaimenum.EMAIL)].(string)
|
email, ok := claims[string(jwtclaimenum.EMAIL)].(string)
|
||||||
if !ok {
|
if !ok {
|
||||||
return data, errors.New("invalid email")
|
return data, fmt.Errorf("invalid email")
|
||||||
}
|
}
|
||||||
|
|
||||||
sessionId, ok := claims[string(jwtclaimenum.SESSION_ID)].(string)
|
sessionId, ok := claims[string(jwtclaimenum.SESSION_ID)].(string)
|
||||||
if !ok {
|
if !ok {
|
||||||
return data, errors.New("invalid session_id")
|
return data, fmt.Errorf("invalid session_id")
|
||||||
}
|
}
|
||||||
|
|
||||||
role, ok := claims[string(jwtclaimenum.ROLE)].(string)
|
role, ok := claims[string(jwtclaimenum.ROLE)].(string)
|
||||||
if !ok {
|
if !ok {
|
||||||
return data, errors.New("invalid role")
|
return data, fmt.Errorf("invalid role")
|
||||||
|
}
|
||||||
|
|
||||||
|
id, ok := claims[string(jwtclaimenum.ID)].(string)
|
||||||
|
if !ok {
|
||||||
|
return data, fmt.Errorf("invalid id")
|
||||||
}
|
}
|
||||||
|
|
||||||
data = authdomain.AuthToken{
|
data = authdomain.AuthToken{
|
||||||
Email: email,
|
Email: email,
|
||||||
SessionID: sessionId,
|
SessionID: sessionId,
|
||||||
Role: role,
|
Role: role,
|
||||||
|
ID: id,
|
||||||
}
|
}
|
||||||
|
|
||||||
return data, nil
|
return data, nil
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package utils
|
package utils
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -11,14 +11,14 @@ func StructToMap(s any) (map[string]any, error) {
|
|||||||
val := reflect.ValueOf(s)
|
val := reflect.ValueOf(s)
|
||||||
|
|
||||||
if val.Kind() != reflect.Struct {
|
if val.Kind() != reflect.Struct {
|
||||||
return nil, errors.New("provided value is not struct")
|
return nil, fmt.Errorf("provided value is not struct")
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := range val.NumField() {
|
for i := range val.NumField() {
|
||||||
field := val.Type().Field(i)
|
field := val.Type().Field(i)
|
||||||
value := val.Field(i)
|
value := val.Field(i)
|
||||||
|
|
||||||
if value.IsZero() || value.IsNil() {
|
if !value.IsValid() {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user