From 7ea809cc09206c73dfb7499e01df80f8919cb3d8 Mon Sep 17 00:00:00 2001 From: "aditya.siregar" Date: Fri, 12 Jul 2024 02:29:18 +0700 Subject: [PATCH] Add Site --- internal/entity/auth.go | 4 ++++ internal/entity/jwt.go | 1 + internal/entity/user.go | 3 +++ internal/handlers/http/auth/auth.go | 9 +++++++++ internal/handlers/response/auth.go | 9 +++++---- internal/handlers/response/site.go | 5 +++++ internal/repository/auth/init.go | 3 ++- internal/repository/crypto/init.go | 1 + k8s/staging/ingress-cors.yaml | 30 +++++++++++++++++++++++++++++ 9 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 k8s/staging/ingress-cors.yaml diff --git a/internal/entity/auth.go b/internal/entity/auth.go index a134f78..d8bc519 100644 --- a/internal/entity/auth.go +++ b/internal/entity/auth.go @@ -26,6 +26,7 @@ type UserDB struct { RoleName string `gorm:"column:role_name" json:"role_name"` PartnerID *int64 `gorm:"column:partner_id" json:"partner_id"` SiteID *int64 `gorm:"column:site_id" json:"site_id"` + SiteName string `gorm:"column:name" json:"site_name"` PartnerName string `gorm:"column:partner_name" json:"partner_name"` PartnerStatus string `gorm:"column:partner_status" json:"partner_status"` CreatedAt time.Time `gorm:"column:created_at" json:"created_at"` @@ -52,6 +53,7 @@ func (u *UserDB) ToUser() *User { PartnerID: u.PartnerID, PartnerName: u.PartnerName, SiteID: u.SiteID, + SiteName: u.SiteName, } return userEntity @@ -88,6 +90,8 @@ func (u *UserDB) ToUserAuthenticate(signedToken string) *AuthenticateUser { PartnerID: u.PartnerID, PartnerName: u.PartnerName, PartnerStatus: u.PartnerStatus, + SiteID: u.SiteID, + SiteName: u.SiteName, } } diff --git a/internal/entity/jwt.go b/internal/entity/jwt.go index ae31eb8..103a1a0 100644 --- a/internal/entity/jwt.go +++ b/internal/entity/jwt.go @@ -9,6 +9,7 @@ type JWTAuthClaims struct { Role int `json:"role"` PartnerID int64 `json:"partner_id"` SiteID int64 `json:"site_id"` + SiteName string `json:"site_name"` jwt.StandardClaims } diff --git a/internal/entity/user.go b/internal/entity/user.go index 4ae55b3..d48e919 100644 --- a/internal/entity/user.go +++ b/internal/entity/user.go @@ -22,6 +22,7 @@ type User struct { RoleName string PartnerID *int64 SiteID *int64 + SiteName string PartnerName string } @@ -33,6 +34,8 @@ type AuthenticateUser struct { PartnerID *int64 PartnerName string PartnerStatus string + SiteID *int64 + SiteName string } type UserRoleDB struct { diff --git a/internal/handlers/http/auth/auth.go b/internal/handlers/http/auth/auth.go index fa398cf..91bc44a 100644 --- a/internal/handlers/http/auth/auth.go +++ b/internal/handlers/http/auth/auth.go @@ -52,6 +52,7 @@ func (h *AuthHandler) AuthLogin(c *gin.Context) { } var partner *response.Partner + var site *response.SiteName if authUser.RoleID != role.SuperAdmin { partner = &response.Partner{ @@ -61,6 +62,13 @@ func (h *AuthHandler) AuthLogin(c *gin.Context) { } } + if authUser.RoleID == role.Casheer { + site = &response.SiteName{ + ID: authUser.SiteID, + Name: authUser.SiteName, + } + } + resp := response.LoginResponse{ Token: authUser.Token, Partner: partner, @@ -69,6 +77,7 @@ func (h *AuthHandler) AuthLogin(c *gin.Context) { ID: int64(authUser.RoleID), Role: authUser.RoleName, }, + Site: site, } c.JSON(http.StatusOK, response.BaseResponse{ diff --git a/internal/handlers/response/auth.go b/internal/handlers/response/auth.go index 37b3c77..11d1ca0 100644 --- a/internal/handlers/response/auth.go +++ b/internal/handlers/response/auth.go @@ -1,10 +1,11 @@ package response type LoginResponse struct { - Token string `json:"token"` - Name string `json:"name"` - Role Role `json:"role"` - Partner *Partner `json:"partner"` + Token string `json:"token"` + Name string `json:"name"` + Role Role `json:"role"` + Partner *Partner `json:"partner"` + Site *SiteName `json:"site,omitempty"` } type Role struct { diff --git a/internal/handlers/response/site.go b/internal/handlers/response/site.go index 9ddb7ee..88a5284 100644 --- a/internal/handlers/response/site.go +++ b/internal/handlers/response/site.go @@ -19,6 +19,11 @@ type Site struct { UpdatedAt string `json:"updated_at"` } +type SiteName struct { + ID *int64 `json:"id"` + Name string `json:"name"` +} + type SiteList struct { Sites []Site `json:"sites"` Total int64 `json:"total"` diff --git a/internal/repository/auth/init.go b/internal/repository/auth/init.go index 105da98..cb50c3b 100644 --- a/internal/repository/auth/init.go +++ b/internal/repository/auth/init.go @@ -26,11 +26,12 @@ func (r *AuthRepository) CheckExistsUserAccount(ctx context.Context, email strin err := r.db. Table("users"). - Select("users.*, user_roles.role_id, user_roles.partner_id, user_roles.site_id, roles.role_name, partners.name as partner_name, partners.status as partner_status"). + Select("users.*, user_roles.role_id, user_roles.partner_id, user_roles.site_id, sites.name, roles.role_name, partners.name as partner_name, partners.status as partner_status"). Where("users.email = ?", email). Joins("left join user_roles on users.id = user_roles.user_id"). Joins("left join roles on user_roles.role_id = roles.role_id"). Joins("left join partners on user_roles.partner_id = partners.id"). + Joins("left join sites on user_roles.site_id = sites.id"). First(&user).Error if errors.Is(err, gorm.ErrRecordNotFound) { diff --git a/internal/repository/crypto/init.go b/internal/repository/crypto/init.go index 3934da0..ea809f3 100644 --- a/internal/repository/crypto/init.go +++ b/internal/repository/crypto/init.go @@ -69,6 +69,7 @@ func (c *CryptoImpl) GenerateJWT(user *entity.User) (string, error) { Role: int(user.RoleID), PartnerID: partnerID, SiteID: siteID, + SiteName: user.SiteName, } token, err := jwt. diff --git a/k8s/staging/ingress-cors.yaml b/k8s/staging/ingress-cors.yaml new file mode 100644 index 0000000..a5681b0 --- /dev/null +++ b/k8s/staging/ingress-cors.yaml @@ -0,0 +1,30 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: furtuna-backend + namespace: altru-staging + annotations: + kubernetes.io/ingress.class: "nginx" + cert-manager.io/cluster-issuer: "letsencrypt-prod" + nginx.ingress.kubernetes.io/ingress-class: "nginx" + nginx.ingress.kubernetes.io/enable-cors: "true" + nginx.ingress.kubernetes.io/cors-allow-origin: "*" + nginx.ingress.kubernetes.io/cors-allow-methods: "GET, POST, OPTIONS" + nginx.ingress.kubernetes.io/cors-allow-headers: "Content-Type, Authorization, x-access-token" + nginx.ingress.kubernetes.io/cors-allow-credentials: "true" +spec: + rules: + - host: "furtuna-backend.app-dev.altru.id" + http: + paths: + - pathType: Prefix + path: / + backend: + service: + name: furtuna-backend + port: + number: 3300 + tls: + - hosts: + - "furtuna-backend.app-dev.altru.id" + secretName: furtuna-backend-app-dev-biz-id-tls