initial commit

This commit is contained in:
hanif salafi 2025-09-30 20:34:56 +07:00
parent 4d9b323691
commit 53e56ea285
267 changed files with 5355 additions and 1265 deletions

View File

@ -30,4 +30,4 @@ deploy:
services: services:
- docker:dind - docker:dind
script: script:
- curl --user $JENKINS_USER:$JENKINS_PWD http://38.47.180.165:8080/job/autodeploy-medols-be/build?token=autodeploymedols - curl --user $JENKINS_USER:$JENKINS_PWD http://38.47.180.165:8080/job/autodeploy-netidhub-be/build?token=autodeploynetidhub

View File

@ -1,8 +1,8 @@
package article_category_details package article_category_details
import ( import (
entity "netidhub-saas-be/app/database/entity"
"time" "time"
entity "web-medols-be/app/database/entity"
"github.com/google/uuid" "github.com/google/uuid"
) )

View File

@ -0,0 +1,26 @@
package entity
import (
"github.com/google/uuid"
"time"
)
type Clients struct {
ID uuid.UUID `json:"id" gorm:"primaryKey;type:UUID"`
Name string `json:"name" gorm:"type:varchar"`
Description *string `json:"description" gorm:"type:text"`
ClientType string `json:"client_type" gorm:"type:varchar;default:'sub_client'"` // 'parent_client', 'sub_client', 'standalone'
ParentClientId *uuid.UUID `json:"parent_client_id" gorm:"type:UUID;index"`
ParentClient *Clients `json:"parent_client,omitempty" gorm:"foreignKey:ParentClientId;references:ID"`
SubClients []Clients `json:"sub_clients,omitempty" gorm:"foreignKey:ParentClientId;references:ID"`
// Metadata
Settings *string `json:"settings" gorm:"type:jsonb"` // JSON for custom settings
MaxUsers *int `json:"max_users" gorm:"type:int4"` // Limit for sub clients
MaxStorage *int64 `json:"max_storage" gorm:"type:int8"` // In bytes
CreatedById *uint `json:"created_by_id" gorm:"type:int4"`
IsActive *bool `json:"is_active" gorm:"type:bool;default:true"`
CreatedAt time.Time `json:"created_at" gorm:"default:now()"`
UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"`
}

View File

@ -1,15 +0,0 @@
package entity
import (
"github.com/google/uuid"
"time"
)
type Clients struct {
ID uuid.UUID `json:"id" gorm:"primaryKey;type:UUID"`
Name string `json:"name" gorm:"type:varchar"`
CreatedById *uint `json:"created_by_id" gorm:"type:int4"`
IsActive *bool `json:"is_active" gorm:"type:bool;default:true"`
CreatedAt time.Time `json:"created_at" gorm:"default:now()"`
UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"`
}

View File

@ -0,0 +1,38 @@
package entity
import (
"github.com/google/uuid"
"time"
)
// UserClientAccess represents many-to-many relationship between Users and Clients
// This allows users to have access to multiple clients (multi-tenant access)
type UserClientAccess struct {
ID uint `json:"id" gorm:"primaryKey;type:int4;autoIncrement"`
UserId uint `json:"user_id" gorm:"type:int4;not null;index:idx_user_client_access"`
ClientId uuid.UUID `json:"client_id" gorm:"type:UUID;not null;index:idx_user_client_access"`
// Access control
AccessType string `json:"access_type" gorm:"type:varchar;default:'read'"` // 'read', 'write', 'admin', 'owner'
CanManage *bool `json:"can_manage" gorm:"type:bool;default:false"` // Can manage client settings
CanDelegate *bool `json:"can_delegate" gorm:"type:bool;default:false"` // Can give access to other users
// If user has access to parent, they automatically have access to all sub-clients
IncludeSubClients *bool `json:"include_sub_clients" gorm:"type:bool;default:false"`
// Relationships
User *Users `json:"user,omitempty" gorm:"foreignKey:UserId;references:ID"`
Client *Clients `json:"client,omitempty" gorm:"foreignKey:ClientId;references:ID"`
GrantedById *uint `json:"granted_by_id" gorm:"type:int4"` // Who granted this access
GrantedBy *Users `json:"granted_by,omitempty" gorm:"foreignKey:GrantedById;references:ID"`
IsActive *bool `json:"is_active" gorm:"type:bool;default:true"`
CreatedAt time.Time `json:"created_at" gorm:"default:now()"`
UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"`
}
// TableName overrides the table name
func (UserClientAccess) TableName() string {
return "user_client_access"
}

View File

@ -29,7 +29,12 @@ type Users struct {
ProfilePicturePath *string `json:"profile_picture_path" gorm:"type:varchar"` ProfilePicturePath *string `json:"profile_picture_path" gorm:"type:varchar"`
TempPassword *string `json:"temp_password" gorm:"type:varchar"` TempPassword *string `json:"temp_password" gorm:"type:varchar"`
IsEmailUpdated *bool `json:"is_email_updated" gorm:"type:bool;default:false"` IsEmailUpdated *bool `json:"is_email_updated" gorm:"type:bool;default:false"`
ClientId *uuid.UUID `json:"client_id" gorm:"type:UUID"`
// Multi-tenant access control
IsSuperAdmin *bool `json:"is_super_admin" gorm:"type:bool;default:false"` // Platform super admin (access all clients)
ClientId *uuid.UUID `json:"client_id" gorm:"type:UUID"` // Primary/default client
ClientAccesses []UserClientAccess `json:"client_accesses,omitempty" gorm:"foreignKey:UserId;references:ID"` // Multiple client access
IsActive *bool `json:"is_active" gorm:"type:bool;default:true"` IsActive *bool `json:"is_active" gorm:"type:bool;default:true"`
CreatedAt time.Time `json:"created_at" gorm:"default:now()"` CreatedAt time.Time `json:"created_at" gorm:"default:now()"`
UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"` UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"`

View File

@ -2,8 +2,8 @@ package users
import ( import (
"github.com/google/uuid" "github.com/google/uuid"
"netidhub-saas-be/app/database/entity"
"time" "time"
"web-medols-be/app/database/entity"
) )
type Users struct { type Users struct {

View File

@ -1,9 +1,9 @@
package database package database
import ( import (
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
"web-medols-be/app/database/entity/article_category_details" "netidhub-saas-be/app/database/entity/article_category_details"
"web-medols-be/config/config" "netidhub-saas-be/config/config"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"gorm.io/driver/postgres" "gorm.io/driver/postgres"
@ -122,6 +122,7 @@ func Models() []interface{} {
entity.UserRoleAccesses{}, entity.UserRoleAccesses{},
entity.Users{}, entity.Users{},
entity.UserRoleLevelDetails{}, entity.UserRoleLevelDetails{},
entity.UserClientAccess{}, // New: Multi-client access for users
} }
} }

View File

@ -2,7 +2,7 @@ package seeds
import ( import (
"gorm.io/gorm" "gorm.io/gorm"
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
) )
type ActivityLogsSeeder struct{} type ActivityLogsSeeder struct{}

View File

@ -2,7 +2,7 @@ package seeds
import ( import (
"gorm.io/gorm" "gorm.io/gorm"
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
) )
type ApprovalWorkflowsSeeder struct{} type ApprovalWorkflowsSeeder struct{}

View File

@ -2,7 +2,7 @@ package seeds
import ( import (
"gorm.io/gorm" "gorm.io/gorm"
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
) )
type MasterApprovalStatusesSeeder struct{} type MasterApprovalStatusesSeeder struct{}

View File

@ -2,7 +2,7 @@ package seeds
import ( import (
"gorm.io/gorm" "gorm.io/gorm"
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
) )
type MasterStatusesSeeder struct{} type MasterStatusesSeeder struct{}

View File

@ -1,7 +1,7 @@
package seeds package seeds
import ( import (
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
"github.com/google/uuid" "github.com/google/uuid"
) )
@ -13,8 +13,8 @@ func CreateNoApprovalWorkflow() *entity.ApprovalWorkflows {
Description: &[]string{"Workflow for clients that don't require approval process"}[0], Description: &[]string{"Workflow for clients that don't require approval process"}[0],
IsDefault: &[]bool{false}[0], IsDefault: &[]bool{false}[0],
IsActive: &[]bool{true}[0], IsActive: &[]bool{true}[0],
RequiresApproval: &[]bool{false}[0], // This is the key field RequiresApproval: &[]bool{false}[0], // This is the key field
AutoPublish: &[]bool{true}[0], // Auto publish articles AutoPublish: &[]bool{true}[0], // Auto publish articles
Steps: []entity.ApprovalWorkflowSteps{}, // No steps needed Steps: []entity.ApprovalWorkflowSteps{}, // No steps needed
} }
} }
@ -23,14 +23,14 @@ func CreateNoApprovalWorkflow() *entity.ApprovalWorkflows {
func CreateClientApprovalSettings(clientId string, requiresApproval bool) *entity.ClientApprovalSettings { func CreateClientApprovalSettings(clientId string, requiresApproval bool) *entity.ClientApprovalSettings {
clientUUID, _ := uuid.Parse(clientId) clientUUID, _ := uuid.Parse(clientId)
return &entity.ClientApprovalSettings{ return &entity.ClientApprovalSettings{
ClientId: clientUUID, ClientId: clientUUID,
RequiresApproval: &[]bool{requiresApproval}[0], RequiresApproval: &[]bool{requiresApproval}[0],
AutoPublishArticles: &[]bool{!requiresApproval}[0], // Auto publish if no approval needed AutoPublishArticles: &[]bool{!requiresApproval}[0], // Auto publish if no approval needed
IsActive: &[]bool{true}[0], IsActive: &[]bool{true}[0],
ApprovalExemptUsers: []uint{}, ApprovalExemptUsers: []uint{},
ApprovalExemptRoles: []uint{}, ApprovalExemptRoles: []uint{},
ApprovalExemptCategories: []uint{}, ApprovalExemptCategories: []uint{},
RequireApprovalFor: []string{}, RequireApprovalFor: []string{},
SkipApprovalFor: []string{}, SkipApprovalFor: []string{},
} }
} }

View File

@ -5,10 +5,10 @@ import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"gorm.io/gorm" "gorm.io/gorm"
"log" "log"
"netidhub-saas-be/app/database/entity"
utilSvc "netidhub-saas-be/utils/service"
"strings" "strings"
"time" "time"
"web-medols-be/app/database/entity"
utilSvc "web-medols-be/utils/service"
) )
func AuditTrailsMiddleware(db *gorm.DB) fiber.Handler { func AuditTrailsMiddleware(db *gorm.DB) fiber.Handler {

View File

@ -1,8 +1,9 @@
package middleware package middleware
import ( import (
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/utils/client"
"strings" "strings"
"web-medols-be/app/database/entity"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/google/uuid" "github.com/google/uuid"
@ -10,8 +11,12 @@ import (
) )
const ( const (
ClientKeyHeader = "X-Client-Key" ClientKeyHeader = "X-Client-Key"
ClientContextKey = "client_id" ClientContextKey = "client_id"
UserIDContextKey = "user_id"
IsSuperAdminContextKey = "is_super_admin"
AccessibleClientIDsKey = "accessible_client_ids"
CurrentClientIDKey = "current_client_id"
) )
// excludedPaths contains paths that don't require client key validation // excludedPaths contains paths that don't require client key validation
@ -57,6 +62,7 @@ func isPathExcluded(path string) bool {
} }
// ClientMiddleware extracts and validates the Client Key from request headers // ClientMiddleware extracts and validates the Client Key from request headers
// Enhanced to support multi-client access and super admin
func ClientMiddleware(db *gorm.DB) fiber.Handler { func ClientMiddleware(db *gorm.DB) fiber.Handler {
return func(c *fiber.Ctx) error { return func(c *fiber.Ctx) error {
// Check if path should be excluded from client key validation // Check if path should be excluded from client key validation
@ -64,19 +70,65 @@ func ClientMiddleware(db *gorm.DB) fiber.Handler {
return c.Next() return c.Next()
} }
// Extract Client Key from header // Check if user ID exists in context (set by auth middleware)
clientKey := c.Get(ClientKeyHeader) userID := c.Locals(UserIDContextKey)
if userID != nil {
if clientKey == "" { // User authenticated - use multi-client logic
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ return handleAuthenticatedUser(c, db, userID)
"success": false,
"code": 400,
"messages": []string{"Client Key is required in header: " + ClientKeyHeader},
})
} }
// Parse UUID // Fallback to X-Client-Key validation (backward compatibility)
clientUUID, err := uuid.Parse(clientKey) return handleClientKeyValidation(c, db)
}
}
// handleAuthenticatedUser handles request from authenticated users
func handleAuthenticatedUser(c *fiber.Ctx, db *gorm.DB, userID interface{}) error {
userId, ok := userID.(uint)
if !ok {
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"success": false,
"code": 401,
"messages": []string{"Invalid user ID in context"},
})
}
// Get user details
var user entity.Users
if err := db.Select("id, is_super_admin, client_id").
Where("id = ?", userId).
First(&user).Error; err != nil {
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"success": false,
"code": 401,
"messages": []string{"User not found"},
})
}
// Store super admin status
isSuperAdmin := user.IsSuperAdmin != nil && *user.IsSuperAdmin
c.Locals(IsSuperAdminContextKey, isSuperAdmin)
// Get accessible client IDs for this user
accessibleClientIDs, err := client.GetAccessibleClientIDs(db, userId, isSuperAdmin)
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"success": false,
"code": 500,
"messages": []string{"Error retrieving client access"},
})
}
// Store accessible client IDs in context
c.Locals(AccessibleClientIDsKey, accessibleClientIDs)
// Determine current client ID (from header or user's primary client)
var currentClientID *uuid.UUID
clientKeyHeader := c.Get(ClientKeyHeader)
if clientKeyHeader != "" {
// User specified a client via header
clientUUID, err := uuid.Parse(clientKeyHeader)
if err != nil { if err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"success": false, "success": false,
@ -85,31 +137,75 @@ func ClientMiddleware(db *gorm.DB) fiber.Handler {
}) })
} }
// Validate client exists and is active // Verify user has access to this client
var client entity.Clients hasAccess, err := client.HasAccessToClient(db, userId, clientUUID, isSuperAdmin)
if err := db.Where("id = ? AND is_active = ?", clientUUID, true).First(&client).Error; err != nil { if err != nil || !hasAccess {
if err == gorm.ErrRecordNotFound { return c.Status(fiber.StatusForbidden).JSON(fiber.Map{
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"success": false,
"code": 401,
"messages": []string{"Invalid or inactive Client Key"},
})
}
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"success": false, "success": false,
"code": 500, "code": 403,
"messages": []string{"Error validating Client Key"}, "messages": []string{"Access denied to this client"},
}) })
} }
// Store client ID in context for use in handlers currentClientID = &clientUUID
c.Locals(ClientContextKey, clientUUID) } else if user.ClientId != nil {
// Use user's primary client
return c.Next() currentClientID = user.ClientId
} }
// Store current client ID
if currentClientID != nil {
c.Locals(CurrentClientIDKey, *currentClientID)
c.Locals(ClientContextKey, *currentClientID) // Backward compatibility
}
return c.Next()
} }
// GetClientID retrieves the client ID from the context // handleClientKeyValidation validates X-Client-Key header (backward compatibility)
func handleClientKeyValidation(c *fiber.Ctx, db *gorm.DB) error {
clientKey := c.Get(ClientKeyHeader)
if clientKey == "" {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"success": false,
"code": 400,
"messages": []string{"Client Key is required in header: " + ClientKeyHeader},
})
}
clientUUID, err := uuid.Parse(clientKey)
if err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"success": false,
"code": 400,
"messages": []string{"Invalid Client Key format"},
})
}
var clientEntity entity.Clients
if err := db.Where("id = ? AND is_active = ?", clientUUID, true).First(&clientEntity).Error; err != nil {
if err == gorm.ErrRecordNotFound {
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"success": false,
"code": 401,
"messages": []string{"Invalid or inactive Client Key"},
})
}
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"success": false,
"code": 500,
"messages": []string{"Error validating Client Key"},
})
}
c.Locals(ClientContextKey, clientUUID)
c.Locals(CurrentClientIDKey, clientUUID)
return c.Next()
}
// GetClientID retrieves the client ID from the context (backward compatibility)
func GetClientID(c *fiber.Ctx) *uuid.UUID { func GetClientID(c *fiber.Ctx) *uuid.UUID {
if clientID, ok := c.Locals(ClientContextKey).(uuid.UUID); ok { if clientID, ok := c.Locals(ClientContextKey).(uuid.UUID); ok {
return &clientID return &clientID
@ -117,6 +213,30 @@ func GetClientID(c *fiber.Ctx) *uuid.UUID {
return nil return nil
} }
// GetAccessibleClientIDs retrieves all accessible client IDs from context
func GetAccessibleClientIDs(c *fiber.Ctx) []uuid.UUID {
if clientIDs, ok := c.Locals(AccessibleClientIDsKey).([]uuid.UUID); ok {
return clientIDs
}
return nil // nil = super admin or no restriction
}
// GetCurrentClientID retrieves the current working client ID from context
func GetCurrentClientID(c *fiber.Ctx) *uuid.UUID {
if clientID, ok := c.Locals(CurrentClientIDKey).(uuid.UUID); ok {
return &clientID
}
return nil
}
// IsSuperAdmin checks if the current user is a super admin
func IsSuperAdmin(c *fiber.Ctx) bool {
if isSuperAdmin, ok := c.Locals(IsSuperAdminContextKey).(bool); ok {
return isSuperAdmin
}
return false
}
// AddExcludedPath adds a new path to the excluded paths list // AddExcludedPath adds a new path to the excluded paths list
func AddExcludedPath(path string) { func AddExcludedPath(path string) {
excludedPaths = append(excludedPaths, path) excludedPaths = append(excludedPaths, path)

View File

@ -3,8 +3,8 @@ package middleware
import ( import (
"fmt" "fmt"
"gorm.io/gorm" "gorm.io/gorm"
"netidhub-saas-be/app/database/entity"
"time" "time"
"web-medols-be/app/database/entity"
) )
type PostgresStorage struct { type PostgresStorage struct {

View File

@ -2,10 +2,10 @@ package middleware
import ( import (
"log" "log"
"netidhub-saas-be/app/database"
"netidhub-saas-be/config/config"
utilsSvc "netidhub-saas-be/utils"
"time" "time"
"web-medols-be/app/database"
"web-medols-be/config/config"
utilsSvc "web-medols-be/utils"
"github.com/gofiber/fiber/v2/middleware/csrf" "github.com/gofiber/fiber/v2/middleware/csrf"
"github.com/gofiber/fiber/v2/middleware/session" "github.com/gofiber/fiber/v2/middleware/session"

View File

@ -1,9 +1,9 @@
package middleware package middleware
import ( import (
"web-medols-be/app/database/entity/users" "netidhub-saas-be/app/database/entity/users"
"web-medols-be/app/module/users/repository" "netidhub-saas-be/app/module/users/repository"
utilSvc "web-medols-be/utils/service" utilSvc "netidhub-saas-be/utils/service"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/rs/zerolog" "github.com/rs/zerolog"

View File

@ -1,9 +1,9 @@
package activity_logs package activity_logs
import ( import (
"web-medols-be/app/module/activity_logs/controller" "netidhub-saas-be/app/module/activity_logs/controller"
"web-medols-be/app/module/activity_logs/repository" "netidhub-saas-be/app/module/activity_logs/repository"
"web-medols-be/app/module/activity_logs/service" "netidhub-saas-be/app/module/activity_logs/service"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"go.uber.org/fx" "go.uber.org/fx"

View File

@ -3,12 +3,12 @@ package controller
import ( import (
"strconv" "strconv"
"strings" "strings"
"web-medols-be/app/middleware" "netidhub-saas-be/app/middleware"
"web-medols-be/app/module/activity_logs/request" "netidhub-saas-be/app/module/activity_logs/request"
"web-medols-be/app/module/activity_logs/service" "netidhub-saas-be/app/module/activity_logs/service"
"web-medols-be/utils/paginator" "netidhub-saas-be/utils/paginator"
utilRes "web-medols-be/utils/response" utilRes "netidhub-saas-be/utils/response"
utilVal "web-medols-be/utils/validator" utilVal "netidhub-saas-be/utils/validator"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/rs/zerolog" "github.com/rs/zerolog"

View File

@ -2,7 +2,7 @@ package controller
import ( import (
"github.com/rs/zerolog" "github.com/rs/zerolog"
"web-medols-be/app/module/activity_logs/service" "netidhub-saas-be/app/module/activity_logs/service"
) )
type Controller struct { type Controller struct {

View File

@ -1,8 +1,8 @@
package mapper package mapper
import ( import (
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
res "web-medols-be/app/module/activity_logs/response" res "netidhub-saas-be/app/module/activity_logs/response"
) )
func ActivityLogsResponseMapper(activityLogsReq *entity.ActivityLogs) (activityLogsRes *res.ActivityLogsResponse) { func ActivityLogsResponseMapper(activityLogsReq *entity.ActivityLogs) (activityLogsRes *res.ActivityLogsResponse) {

View File

@ -4,12 +4,12 @@ import (
"fmt" "fmt"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"netidhub-saas-be/app/database"
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/app/module/activity_logs/request"
"netidhub-saas-be/utils/paginator"
"strings" "strings"
"time" "time"
"web-medols-be/app/database"
"web-medols-be/app/database/entity"
"web-medols-be/app/module/activity_logs/request"
"web-medols-be/utils/paginator"
) )
type activityLogsRepository struct { type activityLogsRepository struct {

View File

@ -1,10 +1,10 @@
package request package request
import ( import (
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/utils/paginator"
"strconv" "strconv"
"time" "time"
"web-medols-be/app/database/entity"
"web-medols-be/utils/paginator"
) )
type ActivityLogsGeneric interface { type ActivityLogsGeneric interface {

View File

@ -3,15 +3,15 @@ package service
import ( import (
"github.com/google/uuid" "github.com/google/uuid"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
"web-medols-be/app/module/activity_logs/mapper" "netidhub-saas-be/app/module/activity_logs/mapper"
"web-medols-be/app/module/activity_logs/repository" "netidhub-saas-be/app/module/activity_logs/repository"
"web-medols-be/app/module/activity_logs/request" "netidhub-saas-be/app/module/activity_logs/request"
"web-medols-be/app/module/activity_logs/response" "netidhub-saas-be/app/module/activity_logs/response"
"web-medols-be/app/module/articles/service" "netidhub-saas-be/app/module/articles/service"
usersRepository "web-medols-be/app/module/users/repository" usersRepository "netidhub-saas-be/app/module/users/repository"
"web-medols-be/utils/paginator" "netidhub-saas-be/utils/paginator"
utilSvc "web-medols-be/utils/service" utilSvc "netidhub-saas-be/utils/service"
) )
// ActivityLogsService // ActivityLogsService

View File

@ -3,9 +3,9 @@ package advertisement
import ( import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"go.uber.org/fx" "go.uber.org/fx"
"web-medols-be/app/module/advertisement/controller" "netidhub-saas-be/app/module/advertisement/controller"
"web-medols-be/app/module/advertisement/repository" "netidhub-saas-be/app/module/advertisement/repository"
"web-medols-be/app/module/advertisement/service" "netidhub-saas-be/app/module/advertisement/service"
) )
// struct of AdvertisementRouter // struct of AdvertisementRouter

View File

@ -1,17 +1,17 @@
package controller package controller
import ( import (
"netidhub-saas-be/app/middleware"
"netidhub-saas-be/app/module/advertisement/request"
"netidhub-saas-be/app/module/advertisement/service"
"netidhub-saas-be/utils/paginator"
"strconv" "strconv"
"web-medols-be/app/middleware"
"web-medols-be/app/module/advertisement/request"
"web-medols-be/app/module/advertisement/service"
"web-medols-be/utils/paginator"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/rs/zerolog" "github.com/rs/zerolog"
utilRes "web-medols-be/utils/response" utilRes "netidhub-saas-be/utils/response"
utilVal "web-medols-be/utils/validator" utilVal "netidhub-saas-be/utils/validator"
) )
type advertisementController struct { type advertisementController struct {

View File

@ -2,7 +2,7 @@ package controller
import ( import (
"github.com/rs/zerolog" "github.com/rs/zerolog"
"web-medols-be/app/module/advertisement/service" "netidhub-saas-be/app/module/advertisement/service"
) )
type Controller struct { type Controller struct {

View File

@ -1,8 +1,8 @@
package mapper package mapper
import ( import (
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
res "web-medols-be/app/module/advertisement/response" res "netidhub-saas-be/app/module/advertisement/response"
) )
func AdvertisementResponseMapper(advertisementReq *entity.Advertisement, host string) (advertisementRes *res.AdvertisementResponse) { func AdvertisementResponseMapper(advertisementReq *entity.Advertisement, host string) (advertisementRes *res.AdvertisementResponse) {

View File

@ -4,12 +4,12 @@ import (
"fmt" "fmt"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"netidhub-saas-be/app/database"
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/app/module/advertisement/request"
"netidhub-saas-be/utils/paginator"
utilSvc "netidhub-saas-be/utils/service"
"strings" "strings"
"web-medols-be/app/database"
"web-medols-be/app/database/entity"
"web-medols-be/app/module/advertisement/request"
"web-medols-be/utils/paginator"
utilSvc "web-medols-be/utils/service"
) )
type advertisementRepository struct { type advertisementRepository struct {

View File

@ -1,10 +1,10 @@
package request package request
import ( import (
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/utils/paginator"
"strconv" "strconv"
"time" "time"
"web-medols-be/app/database/entity"
"web-medols-be/utils/paginator"
) )
type AdvertisementGeneric interface { type AdvertisementGeneric interface {

View File

@ -11,19 +11,19 @@ import (
"log" "log"
"math/rand" "math/rand"
"mime" "mime"
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/app/module/advertisement/mapper"
"netidhub-saas-be/app/module/advertisement/repository"
"netidhub-saas-be/app/module/advertisement/request"
"netidhub-saas-be/app/module/advertisement/response"
usersRepository "netidhub-saas-be/app/module/users/repository"
config "netidhub-saas-be/config/config"
minioStorage "netidhub-saas-be/config/config"
"netidhub-saas-be/utils/paginator"
"path/filepath" "path/filepath"
"strconv" "strconv"
"strings" "strings"
"time" "time"
"web-medols-be/app/database/entity"
"web-medols-be/app/module/advertisement/mapper"
"web-medols-be/app/module/advertisement/repository"
"web-medols-be/app/module/advertisement/request"
"web-medols-be/app/module/advertisement/response"
usersRepository "web-medols-be/app/module/users/repository"
config "web-medols-be/config/config"
minioStorage "web-medols-be/config/config"
"web-medols-be/utils/paginator"
) )
// AdvertisementService // AdvertisementService

View File

@ -3,9 +3,9 @@ package approval_workflow_steps
import ( import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"go.uber.org/fx" "go.uber.org/fx"
"web-medols-be/app/module/approval_workflow_steps/controller" "netidhub-saas-be/app/module/approval_workflow_steps/controller"
"web-medols-be/app/module/approval_workflow_steps/repository" "netidhub-saas-be/app/module/approval_workflow_steps/repository"
"web-medols-be/app/module/approval_workflow_steps/service" "netidhub-saas-be/app/module/approval_workflow_steps/service"
) )
// ApprovalWorkflowStepsRouter struct of ApprovalWorkflowStepsRouter // ApprovalWorkflowStepsRouter struct of ApprovalWorkflowStepsRouter

View File

@ -1,14 +1,14 @@
package controller package controller
import ( import (
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/app/middleware"
"netidhub-saas-be/app/module/approval_workflow_steps/request"
"netidhub-saas-be/app/module/approval_workflow_steps/service"
"netidhub-saas-be/utils/paginator"
utilRes "netidhub-saas-be/utils/response"
utilVal "netidhub-saas-be/utils/validator"
"strconv" "strconv"
"web-medols-be/app/database/entity"
"web-medols-be/app/middleware"
"web-medols-be/app/module/approval_workflow_steps/request"
"web-medols-be/app/module/approval_workflow_steps/service"
"web-medols-be/utils/paginator"
utilRes "web-medols-be/utils/response"
utilVal "web-medols-be/utils/validator"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/rs/zerolog" "github.com/rs/zerolog"

View File

@ -3,9 +3,9 @@ package mapper
import ( import (
"github.com/google/uuid" "github.com/google/uuid"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
res "web-medols-be/app/module/approval_workflow_steps/response" res "netidhub-saas-be/app/module/approval_workflow_steps/response"
usersRepository "web-medols-be/app/module/users/repository" usersRepository "netidhub-saas-be/app/module/users/repository"
) )
func ApprovalWorkflowStepsResponseMapper( func ApprovalWorkflowStepsResponseMapper(
@ -28,17 +28,17 @@ func ApprovalWorkflowStepsResponseMapper(
} }
approvalWorkflowStepsRes = &res.ApprovalWorkflowStepsResponse{ approvalWorkflowStepsRes = &res.ApprovalWorkflowStepsResponse{
ID: approvalWorkflowStepsReq.ID, ID: approvalWorkflowStepsReq.ID,
WorkflowID: approvalWorkflowStepsReq.WorkflowId, WorkflowID: approvalWorkflowStepsReq.WorkflowId,
StepName: approvalWorkflowStepsReq.StepName, StepName: approvalWorkflowStepsReq.StepName,
StepOrder: approvalWorkflowStepsReq.StepOrder, StepOrder: approvalWorkflowStepsReq.StepOrder,
ApproverRoleID: approvalWorkflowStepsReq.RequiredUserLevelId, ApproverRoleID: approvalWorkflowStepsReq.RequiredUserLevelId,
IsOptional: isOptional, IsOptional: isOptional,
RequiresComment: false, // Default value RequiresComment: false, // Default value
AutoApprove: autoApprove, AutoApprove: autoApprove,
TimeoutHours: approvalWorkflowStepsReq.AutoApproveAfterHours, TimeoutHours: approvalWorkflowStepsReq.AutoApproveAfterHours,
CreatedAt: approvalWorkflowStepsReq.CreatedAt, CreatedAt: approvalWorkflowStepsReq.CreatedAt,
UpdatedAt: approvalWorkflowStepsReq.UpdatedAt, UpdatedAt: approvalWorkflowStepsReq.UpdatedAt,
} }
} }

View File

@ -2,10 +2,10 @@ package repository
import ( import (
"fmt" "fmt"
"web-medols-be/app/database" "netidhub-saas-be/app/database"
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
"web-medols-be/app/module/approval_workflow_steps/request" "netidhub-saas-be/app/module/approval_workflow_steps/request"
"web-medols-be/utils/paginator" "netidhub-saas-be/utils/paginator"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/rs/zerolog" "github.com/rs/zerolog"

View File

@ -3,11 +3,11 @@ package service
import ( import (
"errors" "errors"
"fmt" "fmt"
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
"web-medols-be/app/module/approval_workflow_steps/repository" "netidhub-saas-be/app/module/approval_workflow_steps/repository"
"web-medols-be/app/module/approval_workflow_steps/request" "netidhub-saas-be/app/module/approval_workflow_steps/request"
workflowRepo "web-medols-be/app/module/approval_workflows/repository" workflowRepo "netidhub-saas-be/app/module/approval_workflows/repository"
"web-medols-be/utils/paginator" "netidhub-saas-be/utils/paginator"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/rs/zerolog" "github.com/rs/zerolog"

View File

@ -3,9 +3,9 @@ package approval_workflows
import ( import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"go.uber.org/fx" "go.uber.org/fx"
"web-medols-be/app/module/approval_workflows/controller" "netidhub-saas-be/app/module/approval_workflows/controller"
"web-medols-be/app/module/approval_workflows/repository" "netidhub-saas-be/app/module/approval_workflows/repository"
"web-medols-be/app/module/approval_workflows/service" "netidhub-saas-be/app/module/approval_workflows/service"
) )
// ApprovalWorkflowsRouter struct of ApprovalWorkflowsRouter // ApprovalWorkflowsRouter struct of ApprovalWorkflowsRouter

View File

@ -3,15 +3,15 @@ package controller
import ( import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/app/middleware"
"netidhub-saas-be/app/module/approval_workflows/request"
"netidhub-saas-be/app/module/approval_workflows/service"
"netidhub-saas-be/utils/paginator"
"strconv" "strconv"
"web-medols-be/app/database/entity"
"web-medols-be/app/middleware"
"web-medols-be/app/module/approval_workflows/request"
"web-medols-be/app/module/approval_workflows/service"
"web-medols-be/utils/paginator"
utilRes "web-medols-be/utils/response" utilRes "netidhub-saas-be/utils/response"
utilVal "web-medols-be/utils/validator" utilVal "netidhub-saas-be/utils/validator"
) )
type approvalWorkflowsController struct { type approvalWorkflowsController struct {

View File

@ -3,12 +3,12 @@ package mapper
import ( import (
"github.com/google/uuid" "github.com/google/uuid"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
approvalWorkflowStepsMapper "web-medols-be/app/module/approval_workflow_steps/mapper" approvalWorkflowStepsMapper "netidhub-saas-be/app/module/approval_workflow_steps/mapper"
approvalWorkflowStepsRepository "web-medols-be/app/module/approval_workflow_steps/repository" approvalWorkflowStepsRepository "netidhub-saas-be/app/module/approval_workflow_steps/repository"
approvalWorkflowStepsResponse "web-medols-be/app/module/approval_workflow_steps/response" approvalWorkflowStepsResponse "netidhub-saas-be/app/module/approval_workflow_steps/response"
res "web-medols-be/app/module/approval_workflows/response" res "netidhub-saas-be/app/module/approval_workflows/response"
usersRepository "web-medols-be/app/module/users/repository" usersRepository "netidhub-saas-be/app/module/users/repository"
) )
func ApprovalWorkflowsResponseMapper( func ApprovalWorkflowsResponseMapper(
@ -39,8 +39,6 @@ func ApprovalWorkflowsResponseMapper(
isActive = *approvalWorkflowsReq.IsActive isActive = *approvalWorkflowsReq.IsActive
} }
approvalWorkflowsRes = &res.ApprovalWorkflowsResponse{ approvalWorkflowsRes = &res.ApprovalWorkflowsResponse{
ID: approvalWorkflowsReq.ID, ID: approvalWorkflowsReq.ID,
Name: approvalWorkflowsReq.Name, Name: approvalWorkflowsReq.Name,

View File

@ -2,14 +2,14 @@ package repository
import ( import (
"fmt" "fmt"
"strings"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"web-medols-be/app/database" "netidhub-saas-be/app/database"
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
approvalWorkflowStepsEntity "web-medols-be/app/database/entity" approvalWorkflowStepsEntity "netidhub-saas-be/app/database/entity"
"web-medols-be/app/module/approval_workflows/request" "netidhub-saas-be/app/module/approval_workflows/request"
"web-medols-be/utils/paginator" "netidhub-saas-be/utils/paginator"
"strings"
) )
type approvalWorkflowsRepository struct { type approvalWorkflowsRepository struct {

View File

@ -1,10 +1,10 @@
package request package request
import ( import (
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/utils/paginator"
"strconv" "strconv"
"time" "time"
"web-medols-be/app/database/entity"
"web-medols-be/utils/paginator"
) )
type ApprovalWorkflowsGeneric interface { type ApprovalWorkflowsGeneric interface {

View File

@ -1,8 +1,8 @@
package response package response
import ( import (
approvalWorkflowStepsResponse "netidhub-saas-be/app/module/approval_workflow_steps/response"
"time" "time"
approvalWorkflowStepsResponse "web-medols-be/app/module/approval_workflow_steps/response"
) )
type ApprovalWorkflowsResponse struct { type ApprovalWorkflowsResponse struct {
@ -40,9 +40,9 @@ type ApprovalWorkflowsSummaryResponse struct {
} }
type ApprovalWorkflowsStatsResponse struct { type ApprovalWorkflowsStatsResponse struct {
TotalWorkflows int `json:"totalWorkflows"` TotalWorkflows int `json:"totalWorkflows"`
ActiveWorkflows int `json:"activeWorkflows"` ActiveWorkflows int `json:"activeWorkflows"`
InactiveWorkflows int `json:"inactiveWorkflows"` InactiveWorkflows int `json:"inactiveWorkflows"`
TotalSteps int `json:"totalSteps"` TotalSteps int `json:"totalSteps"`
AverageStepsPerFlow int `json:"averageStepsPerFlow"` AverageStepsPerFlow int `json:"averageStepsPerFlow"`
} }

View File

@ -5,17 +5,17 @@ import (
"fmt" "fmt"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
"web-medols-be/app/module/approval_workflows/repository" stepRepo "netidhub-saas-be/app/module/approval_workflow_steps/repository"
"web-medols-be/app/module/approval_workflows/request" "netidhub-saas-be/app/module/approval_workflows/repository"
stepRepo "web-medols-be/app/module/approval_workflow_steps/repository" "netidhub-saas-be/app/module/approval_workflows/request"
"web-medols-be/utils/paginator" "netidhub-saas-be/utils/paginator"
) )
type approvalWorkflowsService struct { type approvalWorkflowsService struct {
ApprovalWorkflowsRepository repository.ApprovalWorkflowsRepository ApprovalWorkflowsRepository repository.ApprovalWorkflowsRepository
ApprovalWorkflowStepsRepository stepRepo.ApprovalWorkflowStepsRepository ApprovalWorkflowStepsRepository stepRepo.ApprovalWorkflowStepsRepository
Log zerolog.Logger Log zerolog.Logger
} }
// ApprovalWorkflowsService define interface of IApprovalWorkflowsService // ApprovalWorkflowsService define interface of IApprovalWorkflowsService

View File

@ -3,9 +3,9 @@ package article_approval_flows
import ( import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"go.uber.org/fx" "go.uber.org/fx"
"web-medols-be/app/module/article_approval_flows/controller" "netidhub-saas-be/app/module/article_approval_flows/controller"
"web-medols-be/app/module/article_approval_flows/repository" "netidhub-saas-be/app/module/article_approval_flows/repository"
"web-medols-be/app/module/article_approval_flows/service" "netidhub-saas-be/app/module/article_approval_flows/service"
) )
// ArticleApprovalFlowsRouter struct of ArticleApprovalFlowsRouter // ArticleApprovalFlowsRouter struct of ArticleApprovalFlowsRouter

View File

@ -1,19 +1,19 @@
package controller package controller
import ( import (
"netidhub-saas-be/app/middleware"
"netidhub-saas-be/app/module/article_approval_flows/request"
"netidhub-saas-be/app/module/article_approval_flows/service"
usersRepository "netidhub-saas-be/app/module/users/repository"
"netidhub-saas-be/utils/paginator"
utilSvc "netidhub-saas-be/utils/service"
"strconv" "strconv"
"web-medols-be/app/middleware"
"web-medols-be/app/module/article_approval_flows/request"
"web-medols-be/app/module/article_approval_flows/service"
usersRepository "web-medols-be/app/module/users/repository"
"web-medols-be/utils/paginator"
utilSvc "web-medols-be/utils/service"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/rs/zerolog" "github.com/rs/zerolog"
utilRes "web-medols-be/utils/response" utilRes "netidhub-saas-be/utils/response"
utilVal "web-medols-be/utils/validator" utilVal "netidhub-saas-be/utils/validator"
) )
type articleApprovalFlowsController struct { type articleApprovalFlowsController struct {

View File

@ -1,18 +1,18 @@
package mapper package mapper
import ( import (
"time"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
articleApprovalStepLogsResponse "web-medols-be/app/module/article_approval_step_logs/response" approvalWorkflowsRepository "netidhub-saas-be/app/module/approval_workflows/repository"
articleApprovalStepLogsRepository "web-medols-be/app/module/article_approval_step_logs/repository" approvalWorkflowsResponse "netidhub-saas-be/app/module/approval_workflows/response"
approvalWorkflowsRepository "web-medols-be/app/module/approval_workflows/repository" res "netidhub-saas-be/app/module/article_approval_flows/response"
approvalWorkflowsResponse "web-medols-be/app/module/approval_workflows/response" articleApprovalStepLogsRepository "netidhub-saas-be/app/module/article_approval_step_logs/repository"
articlesRepository "web-medols-be/app/module/articles/repository" articleApprovalStepLogsResponse "netidhub-saas-be/app/module/article_approval_step_logs/response"
articlesResponse "web-medols-be/app/module/articles/response" articlesRepository "netidhub-saas-be/app/module/articles/repository"
usersRepository "web-medols-be/app/module/users/repository" articlesResponse "netidhub-saas-be/app/module/articles/response"
res "web-medols-be/app/module/article_approval_flows/response" usersRepository "netidhub-saas-be/app/module/users/repository"
"time"
) )
func ArticleApprovalFlowsResponseMapper( func ArticleApprovalFlowsResponseMapper(
@ -26,8 +26,6 @@ func ArticleApprovalFlowsResponseMapper(
usersRepo usersRepository.UsersRepository, usersRepo usersRepository.UsersRepository,
) (articleApprovalFlowsRes *res.ArticleApprovalFlowsResponse) { ) (articleApprovalFlowsRes *res.ArticleApprovalFlowsResponse) {
// Get article information // Get article information
var articleRes *articlesResponse.ArticlesResponse var articleRes *articlesResponse.ArticlesResponse
if articleApprovalFlowsReq.ArticleId != 0 { if articleApprovalFlowsReq.ArticleId != 0 {
@ -84,21 +82,21 @@ func ArticleApprovalFlowsResponseMapper(
} }
articleApprovalFlowsRes = &res.ArticleApprovalFlowsResponse{ articleApprovalFlowsRes = &res.ArticleApprovalFlowsResponse{
ID: articleApprovalFlowsReq.ID, ID: articleApprovalFlowsReq.ID,
ArticleID: articleApprovalFlowsReq.ArticleId, ArticleID: articleApprovalFlowsReq.ArticleId,
WorkflowID: articleApprovalFlowsReq.WorkflowId, WorkflowID: articleApprovalFlowsReq.WorkflowId,
CurrentStep: articleApprovalFlowsReq.CurrentStep, CurrentStep: articleApprovalFlowsReq.CurrentStep,
Status: statusStr, Status: statusStr,
SubmittedBy: articleApprovalFlowsReq.SubmittedById, SubmittedBy: articleApprovalFlowsReq.SubmittedById,
SubmittedAt: articleApprovalFlowsReq.SubmittedAt, SubmittedAt: articleApprovalFlowsReq.SubmittedAt,
CompletedAt: articleApprovalFlowsReq.CompletedAt, CompletedAt: articleApprovalFlowsReq.CompletedAt,
RejectionReason: articleApprovalFlowsReq.RejectionReason, RejectionReason: articleApprovalFlowsReq.RejectionReason,
RevisionReason: articleApprovalFlowsReq.RevisionMessage, RevisionReason: articleApprovalFlowsReq.RevisionMessage,
CreatedAt: articleApprovalFlowsReq.CreatedAt, CreatedAt: articleApprovalFlowsReq.CreatedAt,
UpdatedAt: articleApprovalFlowsReq.UpdatedAt, UpdatedAt: articleApprovalFlowsReq.UpdatedAt,
Article: articleRes, Article: articleRes,
Workflow: approvalWorkflowRes, Workflow: approvalWorkflowRes,
StepLogs: stepLogsArr, StepLogs: stepLogsArr,
} }
} }
@ -164,7 +162,6 @@ func ArticleApprovalFlowsDetailResponseMapper(
IsActive: *approvalWorkflow.IsActive, IsActive: *approvalWorkflow.IsActive,
CreatedAt: approvalWorkflow.CreatedAt, CreatedAt: approvalWorkflow.CreatedAt,
UpdatedAt: approvalWorkflow.UpdatedAt, UpdatedAt: approvalWorkflow.UpdatedAt,
} }
} }
} }
@ -187,22 +184,22 @@ func ArticleApprovalFlowsDetailResponseMapper(
} }
articleApprovalFlowsRes = &res.ArticleApprovalFlowsDetailResponse{ articleApprovalFlowsRes = &res.ArticleApprovalFlowsDetailResponse{
ID: articleApprovalFlowsReq.ID, ID: articleApprovalFlowsReq.ID,
ArticleID: articleApprovalFlowsReq.ArticleId, ArticleID: articleApprovalFlowsReq.ArticleId,
WorkflowID: articleApprovalFlowsReq.WorkflowId, WorkflowID: articleApprovalFlowsReq.WorkflowId,
CurrentStep: articleApprovalFlowsReq.CurrentStep, CurrentStep: articleApprovalFlowsReq.CurrentStep,
Status: statusStr, Status: statusStr,
SubmittedBy: articleApprovalFlowsReq.SubmittedById, SubmittedBy: articleApprovalFlowsReq.SubmittedById,
SubmittedByName: submittedByName, SubmittedByName: submittedByName,
SubmittedAt: articleApprovalFlowsReq.SubmittedAt, SubmittedAt: articleApprovalFlowsReq.SubmittedAt,
CompletedAt: articleApprovalFlowsReq.CompletedAt, CompletedAt: articleApprovalFlowsReq.CompletedAt,
RejectionReason: articleApprovalFlowsReq.RejectionReason, RejectionReason: articleApprovalFlowsReq.RejectionReason,
RevisionReason: articleApprovalFlowsReq.RevisionMessage, RevisionReason: articleApprovalFlowsReq.RevisionMessage,
CreatedAt: articleApprovalFlowsReq.CreatedAt, CreatedAt: articleApprovalFlowsReq.CreatedAt,
UpdatedAt: articleApprovalFlowsReq.UpdatedAt, UpdatedAt: articleApprovalFlowsReq.UpdatedAt,
Article: articleRes, Article: articleRes,
Workflow: approvalWorkflowRes, Workflow: approvalWorkflowRes,
StepLogs: stepLogsArr, StepLogs: stepLogsArr,
} }
} }

View File

@ -2,11 +2,11 @@ package repository
import ( import (
"fmt" "fmt"
"netidhub-saas-be/app/database"
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/app/module/article_approval_flows/request"
"netidhub-saas-be/utils/paginator"
"time" "time"
"web-medols-be/app/database"
"web-medols-be/app/database/entity"
"web-medols-be/app/module/article_approval_flows/request"
"web-medols-be/utils/paginator"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/rs/zerolog" "github.com/rs/zerolog"

View File

@ -1,9 +1,9 @@
package request package request
import ( import (
"netidhub-saas-be/utils/paginator"
"strconv" "strconv"
"time" "time"
"web-medols-be/utils/paginator"
) )
type ArticleApprovalFlowsGeneric interface { type ArticleApprovalFlowsGeneric interface {
@ -11,14 +11,14 @@ type ArticleApprovalFlowsGeneric interface {
} }
type ArticleApprovalFlowsQueryRequest struct { type ArticleApprovalFlowsQueryRequest struct {
ArticleId *int `json:"articleId"` ArticleId *int `json:"articleId"`
WorkflowId *int `json:"workflowId"` WorkflowId *int `json:"workflowId"`
StatusId *int `json:"statusId"` StatusId *int `json:"statusId"`
SubmittedBy *int `json:"submittedBy"` SubmittedBy *int `json:"submittedBy"`
CurrentStep *int `json:"currentStep"` CurrentStep *int `json:"currentStep"`
DateFrom *time.Time `json:"dateFrom"` DateFrom *time.Time `json:"dateFrom"`
DateTo *time.Time `json:"dateTo"` DateTo *time.Time `json:"dateTo"`
Pagination *paginator.Pagination `json:"pagination"` Pagination *paginator.Pagination `json:"pagination"`
} }
type SubmitForApprovalRequest struct { type SubmitForApprovalRequest struct {
@ -43,13 +43,13 @@ type ResubmitRequest struct {
} }
type ArticleApprovalFlowsQueryRequestContext struct { type ArticleApprovalFlowsQueryRequestContext struct {
ArticleId string `json:"articleId"` ArticleId string `json:"articleId"`
WorkflowId string `json:"workflowId"` WorkflowId string `json:"workflowId"`
StatusId string `json:"statusId"` StatusId string `json:"statusId"`
SubmittedBy string `json:"submittedBy"` SubmittedBy string `json:"submittedBy"`
CurrentStep string `json:"currentStep"` CurrentStep string `json:"currentStep"`
DateFrom string `json:"dateFrom"` DateFrom string `json:"dateFrom"`
DateTo string `json:"dateTo"` DateTo string `json:"dateTo"`
} }
func (req ArticleApprovalFlowsQueryRequestContext) ToParamRequest() ArticleApprovalFlowsQueryRequest { func (req ArticleApprovalFlowsQueryRequestContext) ToParamRequest() ArticleApprovalFlowsQueryRequest {

View File

@ -1,10 +1,10 @@
package response package response
import ( import (
approvalWorkflowsResponse "netidhub-saas-be/app/module/approval_workflows/response"
articleApprovalStepLogsResponse "netidhub-saas-be/app/module/article_approval_step_logs/response"
articlesResponse "netidhub-saas-be/app/module/articles/response"
"time" "time"
articlesResponse "web-medols-be/app/module/articles/response"
approvalWorkflowsResponse "web-medols-be/app/module/approval_workflows/response"
articleApprovalStepLogsResponse "web-medols-be/app/module/article_approval_step_logs/response"
) )
type ArticleApprovalFlowsResponse struct { type ArticleApprovalFlowsResponse struct {
@ -25,9 +25,9 @@ type ArticleApprovalFlowsResponse struct {
UpdatedAt time.Time `json:"updatedAt"` UpdatedAt time.Time `json:"updatedAt"`
// Relations // Relations
Article *articlesResponse.ArticlesResponse `json:"article,omitempty"` Article *articlesResponse.ArticlesResponse `json:"article,omitempty"`
Workflow *approvalWorkflowsResponse.ApprovalWorkflowsResponse `json:"workflow,omitempty"` Workflow *approvalWorkflowsResponse.ApprovalWorkflowsResponse `json:"workflow,omitempty"`
StepLogs []*articleApprovalStepLogsResponse.ArticleApprovalStepLogsResponse `json:"stepLogs,omitempty"` StepLogs []*articleApprovalStepLogsResponse.ArticleApprovalStepLogsResponse `json:"stepLogs,omitempty"`
} }
type ArticleApprovalFlowsDetailResponse struct { type ArticleApprovalFlowsDetailResponse struct {
@ -49,9 +49,9 @@ type ArticleApprovalFlowsDetailResponse struct {
UpdatedAt time.Time `json:"updatedAt"` UpdatedAt time.Time `json:"updatedAt"`
// Relations with full details // Relations with full details
Article *articlesResponse.ArticlesResponse `json:"article"` Article *articlesResponse.ArticlesResponse `json:"article"`
Workflow *approvalWorkflowsResponse.ApprovalWorkflowsWithStepsResponse `json:"workflow"` Workflow *approvalWorkflowsResponse.ApprovalWorkflowsWithStepsResponse `json:"workflow"`
StepLogs []*articleApprovalStepLogsResponse.ArticleApprovalStepLogsResponse `json:"stepLogs"` StepLogs []*articleApprovalStepLogsResponse.ArticleApprovalStepLogsResponse `json:"stepLogs"`
} }
type ArticleApprovalFlowsSummaryResponse struct { type ArticleApprovalFlowsSummaryResponse struct {
@ -69,16 +69,16 @@ type ArticleApprovalFlowsSummaryResponse struct {
} }
type ApprovalQueueResponse struct { type ApprovalQueueResponse struct {
ID uint `json:"id"` ID uint `json:"id"`
ArticleID uint `json:"articleId"` ArticleID uint `json:"articleId"`
ArticleTitle string `json:"articleTitle"` ArticleTitle string `json:"articleTitle"`
ArticleAuthor string `json:"articleAuthor"` ArticleAuthor string `json:"articleAuthor"`
WorkflowName string `json:"workflowName"` WorkflowName string `json:"workflowName"`
CurrentStepName string `json:"currentStepName"` CurrentStepName string `json:"currentStepName"`
SubmittedAt time.Time `json:"submittedAt"` SubmittedAt time.Time `json:"submittedAt"`
DaysWaiting int `json:"daysWaiting"` DaysWaiting int `json:"daysWaiting"`
Priority string `json:"priority"` Priority string `json:"priority"`
RequiresComment bool `json:"requiresComment"` RequiresComment bool `json:"requiresComment"`
} }
type ApprovalDashboardStatsResponse struct { type ApprovalDashboardStatsResponse struct {

View File

@ -2,16 +2,16 @@ package service
import ( import (
"errors" "errors"
"netidhub-saas-be/app/database/entity"
approvalWorkflowStepsRepo "netidhub-saas-be/app/module/approval_workflow_steps/repository"
approvalWorkflowsRepo "netidhub-saas-be/app/module/approval_workflows/repository"
"netidhub-saas-be/app/module/article_approval_flows/repository"
"netidhub-saas-be/app/module/article_approval_flows/request"
approvalStepLogsRepo "netidhub-saas-be/app/module/article_approval_step_logs/repository"
articlesRepo "netidhub-saas-be/app/module/articles/repository"
usersRepo "netidhub-saas-be/app/module/users/repository"
"netidhub-saas-be/utils/paginator"
"time" "time"
"web-medols-be/app/database/entity"
approvalWorkflowStepsRepo "web-medols-be/app/module/approval_workflow_steps/repository"
approvalWorkflowsRepo "web-medols-be/app/module/approval_workflows/repository"
"web-medols-be/app/module/article_approval_flows/repository"
"web-medols-be/app/module/article_approval_flows/request"
approvalStepLogsRepo "web-medols-be/app/module/article_approval_step_logs/repository"
articlesRepo "web-medols-be/app/module/articles/repository"
usersRepo "web-medols-be/app/module/users/repository"
"web-medols-be/utils/paginator"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/rs/zerolog" "github.com/rs/zerolog"

View File

@ -1,9 +1,9 @@
package article_approval_step_logs package article_approval_step_logs
import ( import (
"web-medols-be/app/module/article_approval_step_logs/controller" "netidhub-saas-be/app/module/article_approval_step_logs/controller"
"web-medols-be/app/module/article_approval_step_logs/repository" "netidhub-saas-be/app/module/article_approval_step_logs/repository"
"web-medols-be/app/module/article_approval_step_logs/service" "netidhub-saas-be/app/module/article_approval_step_logs/service"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"go.uber.org/fx" "go.uber.org/fx"

View File

@ -1,13 +1,13 @@
package controller package controller
import ( import (
"netidhub-saas-be/app/middleware"
"netidhub-saas-be/app/module/article_approval_step_logs/request"
"netidhub-saas-be/app/module/article_approval_step_logs/service"
"netidhub-saas-be/utils/paginator"
utilRes "netidhub-saas-be/utils/response"
utilVal "netidhub-saas-be/utils/validator"
"strconv" "strconv"
"web-medols-be/app/middleware"
"web-medols-be/app/module/article_approval_step_logs/request"
"web-medols-be/app/module/article_approval_step_logs/service"
"web-medols-be/utils/paginator"
utilRes "web-medols-be/utils/response"
utilVal "web-medols-be/utils/validator"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/rs/zerolog" "github.com/rs/zerolog"

View File

@ -1,9 +1,9 @@
package mapper package mapper
import ( import (
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
res "web-medols-be/app/module/article_approval_step_logs/response" res "netidhub-saas-be/app/module/article_approval_step_logs/response"
usersRepository "web-medols-be/app/module/users/repository" usersRepository "netidhub-saas-be/app/module/users/repository"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/rs/zerolog" "github.com/rs/zerolog"

View File

@ -2,11 +2,11 @@ package repository
import ( import (
"fmt" "fmt"
"netidhub-saas-be/app/database"
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/app/module/article_approval_step_logs/request"
"netidhub-saas-be/utils/paginator"
"time" "time"
"web-medols-be/app/database"
"web-medols-be/app/database/entity"
"web-medols-be/app/module/article_approval_step_logs/request"
"web-medols-be/utils/paginator"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/rs/zerolog" "github.com/rs/zerolog"

View File

@ -1,10 +1,10 @@
package request package request
import ( import (
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/utils/paginator"
"strconv" "strconv"
"time" "time"
"web-medols-be/app/database/entity"
"web-medols-be/utils/paginator"
) )
type CreateArticleApprovalStepLogsRequest struct { type CreateArticleApprovalStepLogsRequest struct {

View File

@ -1,47 +1,47 @@
package response package response
import ( import (
approvalWorkflowStepsResponse "netidhub-saas-be/app/module/approval_workflow_steps/response"
articlesResponse "netidhub-saas-be/app/module/articles/response"
usersResponse "netidhub-saas-be/app/module/users/response"
"time" "time"
approvalWorkflowStepsResponse "web-medols-be/app/module/approval_workflow_steps/response"
articlesResponse "web-medols-be/app/module/articles/response"
usersResponse "web-medols-be/app/module/users/response"
) )
type ArticleApprovalStepLogsResponse struct { type ArticleApprovalStepLogsResponse struct {
ID uint `json:"id"` ID uint `json:"id"`
ApprovalFlowId uint `json:"approvalFlowId"` ApprovalFlowId uint `json:"approvalFlowId"`
StepOrder int `json:"stepOrder"` StepOrder int `json:"stepOrder"`
StepName string `json:"stepName"` StepName string `json:"stepName"`
ApprovedById *uint `json:"approvedById"` ApprovedById *uint `json:"approvedById"`
Action string `json:"action"` Action string `json:"action"`
Message *string `json:"message"` Message *string `json:"message"`
ProcessedAt time.Time `json:"processedAt"` ProcessedAt time.Time `json:"processedAt"`
UserLevelId uint `json:"userLevelId"` UserLevelId uint `json:"userLevelId"`
ClientId *string `json:"clientId"` ClientId *string `json:"clientId"`
CreatedAt time.Time `json:"createdAt"` CreatedAt time.Time `json:"createdAt"`
// Relations // Relations
ApprovedBy *usersResponse.UsersResponse `json:"approvedBy,omitempty"` ApprovedBy *usersResponse.UsersResponse `json:"approvedBy,omitempty"`
} }
type ArticleApprovalStepLogsDetailResponse struct { type ArticleApprovalStepLogsDetailResponse struct {
ID uint `json:"id"` ID uint `json:"id"`
ArticleApprovalFlowID uint `json:"articleApprovalFlowId"` ArticleApprovalFlowID uint `json:"articleApprovalFlowId"`
WorkflowStepID uint `json:"workflowStepId"` WorkflowStepID uint `json:"workflowStepId"`
ApproverUserID *uint `json:"approverUserId"` ApproverUserID *uint `json:"approverUserId"`
ApprovalStatusID uint `json:"approvalStatusId"` ApprovalStatusID uint `json:"approvalStatusId"`
ApprovalStatusName *string `json:"approvalStatusName,omitempty"` ApprovalStatusName *string `json:"approvalStatusName,omitempty"`
Comments *string `json:"comments"` Comments *string `json:"comments"`
ApprovedAt *time.Time `json:"approvedAt"` ApprovedAt *time.Time `json:"approvedAt"`
DueDate *time.Time `json:"dueDate"` DueDate *time.Time `json:"dueDate"`
IsAutoApproved bool `json:"isAutoApproved"` IsAutoApproved bool `json:"isAutoApproved"`
CreatedAt time.Time `json:"createdAt"` CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"` UpdatedAt time.Time `json:"updatedAt"`
// Relations with full details // Relations with full details
WorkflowStep *approvalWorkflowStepsResponse.ApprovalWorkflowStepsResponse `json:"workflowStep,omitempty"` WorkflowStep *approvalWorkflowStepsResponse.ApprovalWorkflowStepsResponse `json:"workflowStep,omitempty"`
ApproverUser *usersResponse.UsersResponse `json:"approverUser,omitempty"` ApproverUser *usersResponse.UsersResponse `json:"approverUser,omitempty"`
Article *articlesResponse.ArticlesResponse `json:"article,omitempty"` Article *articlesResponse.ArticlesResponse `json:"article,omitempty"`
} }
type ArticleApprovalStepLogsSummaryResponse struct { type ArticleApprovalStepLogsSummaryResponse struct {
@ -58,12 +58,12 @@ type ArticleApprovalStepLogsSummaryResponse struct {
} }
type ApprovalHistoryResponse struct { type ApprovalHistoryResponse struct {
ArticleID uint `json:"articleId"` ArticleID uint `json:"articleId"`
ArticleTitle string `json:"articleTitle"` ArticleTitle string `json:"articleTitle"`
WorkflowName string `json:"workflowName"` WorkflowName string `json:"workflowName"`
StartedAt time.Time `json:"startedAt"` StartedAt time.Time `json:"startedAt"`
CompletedAt *time.Time `json:"completedAt"` CompletedAt *time.Time `json:"completedAt"`
CurrentStep *string `json:"currentStep"` CurrentStep *string `json:"currentStep"`
Steps []ArticleApprovalStepLogsSummaryResponse `json:"steps"` Steps []ArticleApprovalStepLogsSummaryResponse `json:"steps"`
} }

View File

@ -3,13 +3,13 @@ package service
import ( import (
"errors" "errors"
"fmt" "fmt"
"netidhub-saas-be/app/database/entity"
stepRepo "netidhub-saas-be/app/module/approval_workflow_steps/repository"
flowRepo "netidhub-saas-be/app/module/article_approval_flows/repository"
"netidhub-saas-be/app/module/article_approval_step_logs/repository"
"netidhub-saas-be/app/module/article_approval_step_logs/request"
"netidhub-saas-be/utils/paginator"
"time" "time"
"web-medols-be/app/database/entity"
stepRepo "web-medols-be/app/module/approval_workflow_steps/repository"
flowRepo "web-medols-be/app/module/article_approval_flows/repository"
"web-medols-be/app/module/article_approval_step_logs/repository"
"web-medols-be/app/module/article_approval_step_logs/request"
"web-medols-be/utils/paginator"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/rs/zerolog" "github.com/rs/zerolog"

View File

@ -3,9 +3,9 @@ package article_approvals
import ( import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"go.uber.org/fx" "go.uber.org/fx"
"web-medols-be/app/module/article_approvals/controller" "netidhub-saas-be/app/module/article_approvals/controller"
"web-medols-be/app/module/article_approvals/repository" "netidhub-saas-be/app/module/article_approvals/repository"
"web-medols-be/app/module/article_approvals/service" "netidhub-saas-be/app/module/article_approvals/service"
) )
// struct of ArticleApprovalsRouter // struct of ArticleApprovalsRouter

View File

@ -1,17 +1,17 @@
package controller package controller
import ( import (
"netidhub-saas-be/app/middleware"
"netidhub-saas-be/app/module/article_approvals/request"
"netidhub-saas-be/app/module/article_approvals/service"
"netidhub-saas-be/utils/paginator"
"strconv" "strconv"
"web-medols-be/app/middleware"
"web-medols-be/app/module/article_approvals/request"
"web-medols-be/app/module/article_approvals/service"
"web-medols-be/utils/paginator"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/rs/zerolog" "github.com/rs/zerolog"
utilRes "web-medols-be/utils/response" utilRes "netidhub-saas-be/utils/response"
utilVal "web-medols-be/utils/validator" utilVal "netidhub-saas-be/utils/validator"
) )
type articleApprovalsController struct { type articleApprovalsController struct {

View File

@ -2,7 +2,7 @@ package controller
import ( import (
"github.com/rs/zerolog" "github.com/rs/zerolog"
"web-medols-be/app/module/article_approvals/service" "netidhub-saas-be/app/module/article_approvals/service"
) )
type Controller struct { type Controller struct {

View File

@ -1,8 +1,8 @@
package mapper package mapper
import ( import (
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
res "web-medols-be/app/module/article_approvals/response" res "netidhub-saas-be/app/module/article_approvals/response"
) )
func ArticleApprovalsResponseMapper(articleApprovalsReq *entity.ArticleApprovals) (articleApprovalsRes *res.ArticleApprovalsResponse) { func ArticleApprovalsResponseMapper(articleApprovalsReq *entity.ArticleApprovals) (articleApprovalsRes *res.ArticleApprovalsResponse) {

View File

@ -3,12 +3,12 @@ package repository
import ( import (
"fmt" "fmt"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"netidhub-saas-be/app/database"
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/app/module/article_approvals/request"
"netidhub-saas-be/utils/paginator"
utilSvc "netidhub-saas-be/utils/service"
"strings" "strings"
"web-medols-be/app/database"
"web-medols-be/app/database/entity"
"web-medols-be/app/module/article_approvals/request"
"web-medols-be/utils/paginator"
utilSvc "web-medols-be/utils/service"
) )
type articleApprovalsRepository struct { type articleApprovalsRepository struct {

View File

@ -1,9 +1,9 @@
package request package request
import ( import (
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/utils/paginator"
"strconv" "strconv"
"web-medols-be/app/database/entity"
"web-medols-be/utils/paginator"
) )
type ArticleApprovalsGeneric interface { type ArticleApprovalsGeneric interface {

View File

@ -3,16 +3,16 @@ package service
import ( import (
"github.com/google/uuid" "github.com/google/uuid"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
"web-medols-be/app/module/article_approvals/mapper" "netidhub-saas-be/app/module/article_approvals/mapper"
"web-medols-be/app/module/article_approvals/repository" "netidhub-saas-be/app/module/article_approvals/repository"
"web-medols-be/app/module/article_approvals/request" "netidhub-saas-be/app/module/article_approvals/request"
"web-medols-be/app/module/article_approvals/response" "netidhub-saas-be/app/module/article_approvals/response"
articlesService "web-medols-be/app/module/articles/service" articlesService "netidhub-saas-be/app/module/articles/service"
usersRepository "web-medols-be/app/module/users/repository" usersRepository "netidhub-saas-be/app/module/users/repository"
"web-medols-be/utils/paginator" "netidhub-saas-be/utils/paginator"
utilSvc "web-medols-be/utils/service" utilSvc "netidhub-saas-be/utils/service"
) )
// ArticleApprovalsService // ArticleApprovalsService

View File

@ -3,9 +3,9 @@ package article_categories
import ( import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"go.uber.org/fx" "go.uber.org/fx"
"web-medols-be/app/module/article_categories/controller" "netidhub-saas-be/app/module/article_categories/controller"
"web-medols-be/app/module/article_categories/repository" "netidhub-saas-be/app/module/article_categories/repository"
"web-medols-be/app/module/article_categories/service" "netidhub-saas-be/app/module/article_categories/service"
) )
// struct of ArticleCategoriesRouter // struct of ArticleCategoriesRouter

View File

@ -1,16 +1,16 @@
package controller package controller
import ( import (
"netidhub-saas-be/app/middleware"
"netidhub-saas-be/app/module/article_categories/request"
"netidhub-saas-be/app/module/article_categories/service"
"netidhub-saas-be/utils/paginator"
"strconv" "strconv"
"web-medols-be/app/middleware"
"web-medols-be/app/module/article_categories/request"
"web-medols-be/app/module/article_categories/service"
"web-medols-be/utils/paginator"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
utilRes "web-medols-be/utils/response" utilRes "netidhub-saas-be/utils/response"
utilVal "web-medols-be/utils/validator" utilVal "netidhub-saas-be/utils/validator"
) )
type articleCategoriesController struct { type articleCategoriesController struct {

View File

@ -1,6 +1,6 @@
package controller package controller
import "web-medols-be/app/module/article_categories/service" import "netidhub-saas-be/app/module/article_categories/service"
type Controller struct { type Controller struct {
ArticleCategories ArticleCategoriesController ArticleCategories ArticleCategoriesController

View File

@ -1,10 +1,10 @@
package mapper package mapper
import ( import (
"netidhub-saas-be/app/database/entity"
res "netidhub-saas-be/app/module/article_categories/response"
"strconv" "strconv"
"strings" "strings"
"web-medols-be/app/database/entity"
res "web-medols-be/app/module/article_categories/response"
) )
func ArticleCategoriesResponseMapper(articleCategoriesReq *entity.ArticleCategories, host string) (articleCategoriesRes *res.ArticleCategoriesResponse) { func ArticleCategoriesResponseMapper(articleCategoriesReq *entity.ArticleCategories, host string) (articleCategoriesRes *res.ArticleCategoriesResponse) {

View File

@ -4,12 +4,12 @@ import (
"fmt" "fmt"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"netidhub-saas-be/app/database"
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/app/module/article_categories/request"
"netidhub-saas-be/utils/paginator"
utilSvc "netidhub-saas-be/utils/service"
"strings" "strings"
"web-medols-be/app/database"
"web-medols-be/app/database/entity"
"web-medols-be/app/module/article_categories/request"
"web-medols-be/utils/paginator"
utilSvc "web-medols-be/utils/service"
) )
type articleCategoriesRepository struct { type articleCategoriesRepository struct {

View File

@ -1,10 +1,10 @@
package request package request
import ( import (
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/utils/paginator"
"strconv" "strconv"
"time" "time"
"web-medols-be/app/database/entity"
"web-medols-be/utils/paginator"
) )
type ArticleCategoriesGeneric interface { type ArticleCategoriesGeneric interface {

View File

@ -10,20 +10,20 @@ import (
"log" "log"
"math/rand" "math/rand"
"mime" "mime"
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/app/module/article_categories/mapper"
"netidhub-saas-be/app/module/article_categories/repository"
"netidhub-saas-be/app/module/article_categories/request"
"netidhub-saas-be/app/module/article_categories/response"
usersRepository "netidhub-saas-be/app/module/users/repository"
config "netidhub-saas-be/config/config"
minioStorage "netidhub-saas-be/config/config"
"netidhub-saas-be/utils/paginator"
utilSvc "netidhub-saas-be/utils/service"
"path/filepath" "path/filepath"
"strconv" "strconv"
"strings" "strings"
"time" "time"
"web-medols-be/app/database/entity"
"web-medols-be/app/module/article_categories/mapper"
"web-medols-be/app/module/article_categories/repository"
"web-medols-be/app/module/article_categories/request"
"web-medols-be/app/module/article_categories/response"
usersRepository "web-medols-be/app/module/users/repository"
config "web-medols-be/config/config"
minioStorage "web-medols-be/config/config"
"web-medols-be/utils/paginator"
utilSvc "web-medols-be/utils/service"
) )
// ArticleCategoriesService // ArticleCategoriesService

View File

@ -3,9 +3,9 @@ package article_category_details
import ( import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"go.uber.org/fx" "go.uber.org/fx"
"web-medols-be/app/module/article_category_details/controller" "netidhub-saas-be/app/module/article_category_details/controller"
"web-medols-be/app/module/article_category_details/repository" "netidhub-saas-be/app/module/article_category_details/repository"
"web-medols-be/app/module/article_category_details/service" "netidhub-saas-be/app/module/article_category_details/service"
) )
// struct of ArticleCategoryDetailsRouter // struct of ArticleCategoryDetailsRouter

View File

@ -1,15 +1,15 @@
package controller package controller
import ( import (
"netidhub-saas-be/app/module/article_category_details/request"
"netidhub-saas-be/app/module/article_category_details/service"
"netidhub-saas-be/utils/paginator"
"strconv" "strconv"
"web-medols-be/app/module/article_category_details/request"
"web-medols-be/app/module/article_category_details/service"
"web-medols-be/utils/paginator"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
utilRes "web-medols-be/utils/response" utilRes "netidhub-saas-be/utils/response"
utilVal "web-medols-be/utils/validator" utilVal "netidhub-saas-be/utils/validator"
) )
type articleCategoryDetailsController struct { type articleCategoryDetailsController struct {

View File

@ -1,6 +1,6 @@
package controller package controller
import "web-medols-be/app/module/article_category_details/service" import "netidhub-saas-be/app/module/article_category_details/service"
type Controller struct { type Controller struct {
ArticleCategoryDetails ArticleCategoryDetailsController ArticleCategoryDetails ArticleCategoryDetailsController

View File

@ -1,8 +1,8 @@
package mapper package mapper
import ( import (
"web-medols-be/app/database/entity/article_category_details" "netidhub-saas-be/app/database/entity/article_category_details"
res "web-medols-be/app/module/article_category_details/response" res "netidhub-saas-be/app/module/article_category_details/response"
) )
func ArticleCategoryDetailsResponseMapper(articleCategoryDetailsReq *article_category_details.ArticleCategoryDetails) (articleCategoryDetailsRes *res.ArticleCategoryDetailsResponse) { func ArticleCategoryDetailsResponseMapper(articleCategoryDetailsReq *article_category_details.ArticleCategoryDetails) (articleCategoryDetailsRes *res.ArticleCategoryDetailsResponse) {

View File

@ -1,10 +1,10 @@
package repository package repository
import ( import (
"web-medols-be/app/database" "netidhub-saas-be/app/database"
"web-medols-be/app/database/entity/article_category_details" "netidhub-saas-be/app/database/entity/article_category_details"
"web-medols-be/app/module/article_category_details/request" "netidhub-saas-be/app/module/article_category_details/request"
"web-medols-be/utils/paginator" "netidhub-saas-be/utils/paginator"
) )
type articleCategoryDetailsRepository struct { type articleCategoryDetailsRepository struct {

View File

@ -1,9 +1,9 @@
package request package request
import ( import (
"netidhub-saas-be/app/database/entity/article_category_details"
"netidhub-saas-be/utils/paginator"
"time" "time"
"web-medols-be/app/database/entity/article_category_details"
"web-medols-be/utils/paginator"
) )
type ArticleCategoryDetailsGeneric interface { type ArticleCategoryDetailsGeneric interface {

View File

@ -2,11 +2,11 @@ package service
import ( import (
"github.com/rs/zerolog" "github.com/rs/zerolog"
"web-medols-be/app/module/article_category_details/mapper" "netidhub-saas-be/app/module/article_category_details/mapper"
"web-medols-be/app/module/article_category_details/repository" "netidhub-saas-be/app/module/article_category_details/repository"
"web-medols-be/app/module/article_category_details/request" "netidhub-saas-be/app/module/article_category_details/request"
"web-medols-be/app/module/article_category_details/response" "netidhub-saas-be/app/module/article_category_details/response"
"web-medols-be/utils/paginator" "netidhub-saas-be/utils/paginator"
) )
// ArticleCategoryDetailsService // ArticleCategoryDetailsService

View File

@ -3,9 +3,9 @@ package article_comments
import ( import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"go.uber.org/fx" "go.uber.org/fx"
"web-medols-be/app/module/article_comments/controller" "netidhub-saas-be/app/module/article_comments/controller"
"web-medols-be/app/module/article_comments/repository" "netidhub-saas-be/app/module/article_comments/repository"
"web-medols-be/app/module/article_comments/service" "netidhub-saas-be/app/module/article_comments/service"
) )
// struct of ArticleCommentsRouter // struct of ArticleCommentsRouter

View File

@ -1,13 +1,13 @@
package controller package controller
import ( import (
"netidhub-saas-be/app/middleware"
"netidhub-saas-be/app/module/article_comments/request"
"netidhub-saas-be/app/module/article_comments/service"
"netidhub-saas-be/utils/paginator"
utilRes "netidhub-saas-be/utils/response"
utilVal "netidhub-saas-be/utils/validator"
"strconv" "strconv"
"web-medols-be/app/middleware"
"web-medols-be/app/module/article_comments/request"
"web-medols-be/app/module/article_comments/service"
"web-medols-be/utils/paginator"
utilRes "web-medols-be/utils/response"
utilVal "web-medols-be/utils/validator"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/rs/zerolog" "github.com/rs/zerolog"

View File

@ -2,7 +2,7 @@ package controller
import ( import (
"github.com/rs/zerolog" "github.com/rs/zerolog"
"web-medols-be/app/module/article_comments/service" "netidhub-saas-be/app/module/article_comments/service"
) )
type Controller struct { type Controller struct {

View File

@ -2,9 +2,9 @@ package mapper
import ( import (
"github.com/google/uuid" "github.com/google/uuid"
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
res "web-medols-be/app/module/article_comments/response" res "netidhub-saas-be/app/module/article_comments/response"
usersRepository "web-medols-be/app/module/users/repository" usersRepository "netidhub-saas-be/app/module/users/repository"
) )
func ArticleCommentsResponseMapper(clientId *uuid.UUID, articleCommentsReq *entity.ArticleComments, usersRepo usersRepository.UsersRepository) (articleCommentsRes *res.ArticleCommentsResponse) { func ArticleCommentsResponseMapper(clientId *uuid.UUID, articleCommentsReq *entity.ArticleComments, usersRepo usersRepository.UsersRepository) (articleCommentsRes *res.ArticleCommentsResponse) {

View File

@ -4,12 +4,12 @@ import (
"fmt" "fmt"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"netidhub-saas-be/app/database"
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/app/module/article_comments/request"
"netidhub-saas-be/utils/paginator"
utilSvc "netidhub-saas-be/utils/service"
"strings" "strings"
"web-medols-be/app/database"
"web-medols-be/app/database/entity"
"web-medols-be/app/module/article_comments/request"
"web-medols-be/utils/paginator"
utilSvc "web-medols-be/utils/service"
) )
type articleCommentsRepository struct { type articleCommentsRepository struct {

View File

@ -1,10 +1,10 @@
package request package request
import ( import (
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/utils/paginator"
"strconv" "strconv"
"time" "time"
"web-medols-be/app/database/entity"
"web-medols-be/utils/paginator"
) )
type ArticleCommentsGeneric interface { type ArticleCommentsGeneric interface {

View File

@ -3,15 +3,15 @@ package service
import ( import (
"github.com/google/uuid" "github.com/google/uuid"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
"web-medols-be/app/module/article_comments/mapper" "netidhub-saas-be/app/module/article_comments/mapper"
"web-medols-be/app/module/article_comments/repository" "netidhub-saas-be/app/module/article_comments/repository"
"web-medols-be/app/module/article_comments/request" "netidhub-saas-be/app/module/article_comments/request"
"web-medols-be/app/module/article_comments/response" "netidhub-saas-be/app/module/article_comments/response"
usersRepository "web-medols-be/app/module/users/repository" usersRepository "netidhub-saas-be/app/module/users/repository"
"web-medols-be/utils/paginator" "netidhub-saas-be/utils/paginator"
utilSvc "web-medols-be/utils/service" utilSvc "netidhub-saas-be/utils/service"
) )
// ArticleCommentsService // ArticleCommentsService

View File

@ -3,9 +3,9 @@ package article_files
import ( import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"go.uber.org/fx" "go.uber.org/fx"
"web-medols-be/app/module/article_files/controller" "netidhub-saas-be/app/module/article_files/controller"
"web-medols-be/app/module/article_files/repository" "netidhub-saas-be/app/module/article_files/repository"
"web-medols-be/app/module/article_files/service" "netidhub-saas-be/app/module/article_files/service"
) )
// struct of ArticleFilesRouter // struct of ArticleFilesRouter

View File

@ -2,13 +2,13 @@ package controller
import ( import (
"fmt" "fmt"
"netidhub-saas-be/app/middleware"
"netidhub-saas-be/app/module/article_files/request"
"netidhub-saas-be/app/module/article_files/service"
"netidhub-saas-be/utils/paginator"
utilRes "netidhub-saas-be/utils/response"
utilVal "netidhub-saas-be/utils/validator"
"strconv" "strconv"
"web-medols-be/app/middleware"
"web-medols-be/app/module/article_files/request"
"web-medols-be/app/module/article_files/service"
"web-medols-be/utils/paginator"
utilRes "web-medols-be/utils/response"
utilVal "web-medols-be/utils/validator"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
) )

View File

@ -1,6 +1,6 @@
package controller package controller
import "web-medols-be/app/module/article_files/service" import "netidhub-saas-be/app/module/article_files/service"
type Controller struct { type Controller struct {
ArticleFiles ArticleFilesController ArticleFiles ArticleFilesController

View File

@ -1,8 +1,8 @@
package mapper package mapper
import ( import (
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
res "web-medols-be/app/module/article_files/response" res "netidhub-saas-be/app/module/article_files/response"
) )
func ArticleFilesResponseMapper(articleFilesReq *entity.ArticleFiles, host string) (articleFilesRes *res.ArticleFilesResponse) { func ArticleFilesResponseMapper(articleFilesReq *entity.ArticleFiles, host string) (articleFilesRes *res.ArticleFilesResponse) {

View File

@ -3,12 +3,12 @@ package repository
import ( import (
"fmt" "fmt"
"github.com/google/uuid" "github.com/google/uuid"
"netidhub-saas-be/app/database"
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/app/module/article_files/request"
"netidhub-saas-be/utils/paginator"
utilSvc "netidhub-saas-be/utils/service"
"strings" "strings"
"web-medols-be/app/database"
"web-medols-be/app/database/entity"
"web-medols-be/app/module/article_files/request"
"web-medols-be/utils/paginator"
utilSvc "web-medols-be/utils/service"
) )
type articleFilesRepository struct { type articleFilesRepository struct {

View File

@ -1,10 +1,10 @@
package request package request
import ( import (
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/utils/paginator"
"strconv" "strconv"
"time" "time"
"web-medols-be/app/database/entity"
"web-medols-be/utils/paginator"
) )
type ArticleFilesGeneric interface { type ArticleFilesGeneric interface {

View File

@ -12,19 +12,19 @@ import (
"math/rand" "math/rand"
"mime" "mime"
"mime/multipart" "mime/multipart"
"netidhub-saas-be/app/module/article_files/mapper"
"netidhub-saas-be/app/module/article_files/repository"
"netidhub-saas-be/app/module/article_files/request"
"netidhub-saas-be/app/module/article_files/response"
config "netidhub-saas-be/config/config"
minioStorage "netidhub-saas-be/config/config"
"netidhub-saas-be/utils/paginator"
"os" "os"
"path/filepath" "path/filepath"
"strconv" "strconv"
"strings" "strings"
"sync" "sync"
"time" "time"
"web-medols-be/app/module/article_files/mapper"
"web-medols-be/app/module/article_files/repository"
"web-medols-be/app/module/article_files/request"
"web-medols-be/app/module/article_files/response"
config "web-medols-be/config/config"
minioStorage "web-medols-be/config/config"
"web-medols-be/utils/paginator"
) )
// ArticleFilesService // ArticleFilesService

View File

@ -3,9 +3,9 @@ package article_nulis_ai
import ( import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"go.uber.org/fx" "go.uber.org/fx"
"web-medols-be/app/module/article_nulis_ai/controller" "netidhub-saas-be/app/module/article_nulis_ai/controller"
"web-medols-be/app/module/article_nulis_ai/repository" "netidhub-saas-be/app/module/article_nulis_ai/repository"
"web-medols-be/app/module/article_nulis_ai/service" "netidhub-saas-be/app/module/article_nulis_ai/service"
) )
// struct of ArticleNulisAIRouter // struct of ArticleNulisAIRouter

View File

@ -1,12 +1,12 @@
package controller package controller
import ( import (
"netidhub-saas-be/app/module/article_nulis_ai/request"
"netidhub-saas-be/app/module/article_nulis_ai/service"
"netidhub-saas-be/utils/paginator"
utilRes "netidhub-saas-be/utils/response"
utilVal "netidhub-saas-be/utils/validator"
"strconv" "strconv"
"web-medols-be/app/module/article_nulis_ai/request"
"web-medols-be/app/module/article_nulis_ai/service"
"web-medols-be/utils/paginator"
utilRes "web-medols-be/utils/response"
utilVal "web-medols-be/utils/validator"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/rs/zerolog" "github.com/rs/zerolog"

View File

@ -2,7 +2,7 @@ package controller
import ( import (
"github.com/rs/zerolog" "github.com/rs/zerolog"
"web-medols-be/app/module/article_nulis_ai/service" "netidhub-saas-be/app/module/article_nulis_ai/service"
) )
type Controller struct { type Controller struct {

View File

@ -1,8 +1,8 @@
package mapper package mapper
import ( import (
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
res "web-medols-be/app/module/article_nulis_ai/response" res "netidhub-saas-be/app/module/article_nulis_ai/response"
) )
func ArticleNulisAIResponseMapper(articleNulisAIReq *entity.ArticleNulisAI) (articleNulisAIRes *res.ArticleNulisAIResponse) { func ArticleNulisAIResponseMapper(articleNulisAIReq *entity.ArticleNulisAI) (articleNulisAIRes *res.ArticleNulisAIResponse) {

View File

@ -3,11 +3,11 @@ package repository
import ( import (
"fmt" "fmt"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"netidhub-saas-be/app/database"
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/app/module/article_nulis_ai/request"
"netidhub-saas-be/utils/paginator"
"strings" "strings"
"web-medols-be/app/database"
"web-medols-be/app/database/entity"
"web-medols-be/app/module/article_nulis_ai/request"
"web-medols-be/utils/paginator"
) )
type articleNulisAIRepository struct { type articleNulisAIRepository struct {

View File

@ -1,10 +1,10 @@
package request package request
import ( import (
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/utils/paginator"
"strconv" "strconv"
"time" "time"
"web-medols-be/app/database/entity"
"web-medols-be/utils/paginator"
) )
type ArticleNulisAIGeneric interface { type ArticleNulisAIGeneric interface {

View File

@ -2,17 +2,17 @@ package service
import ( import (
"github.com/rs/zerolog" "github.com/rs/zerolog"
"web-medols-be/app/database/entity" "netidhub-saas-be/app/database/entity"
"web-medols-be/app/module/article_nulis_ai/mapper" "netidhub-saas-be/app/module/article_nulis_ai/mapper"
"web-medols-be/app/module/article_nulis_ai/repository" "netidhub-saas-be/app/module/article_nulis_ai/repository"
"web-medols-be/app/module/article_nulis_ai/request" "netidhub-saas-be/app/module/article_nulis_ai/request"
"web-medols-be/app/module/article_nulis_ai/response" "netidhub-saas-be/app/module/article_nulis_ai/response"
articlesRepository "web-medols-be/app/module/articles/repository" articlesRepository "netidhub-saas-be/app/module/articles/repository"
articles "web-medols-be/app/module/articles/request" articles "netidhub-saas-be/app/module/articles/request"
usersRepository "web-medols-be/app/module/users/repository" usersRepository "netidhub-saas-be/app/module/users/repository"
"web-medols-be/utils/paginator" "netidhub-saas-be/utils/paginator"
utilSvc "web-medols-be/utils/service" utilSvc "netidhub-saas-be/utils/service"
) )
// ArticleNulisAIService // ArticleNulisAIService

Some files were not shown because too many files have changed in this diff Show More