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:
- docker:dind
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
import (
entity "netidhub-saas-be/app/database/entity"
"time"
entity "web-medols-be/app/database/entity"
"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"`
TempPassword *string `json:"temp_password" gorm:"type:varchar"`
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"`
CreatedAt time.Time `json:"created_at" gorm:"default:now()"`
UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"`

View File

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

View File

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

View File

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

View File

@ -2,7 +2,7 @@ package seeds
import (
"gorm.io/gorm"
"web-medols-be/app/database/entity"
"netidhub-saas-be/app/database/entity"
)
type ApprovalWorkflowsSeeder struct{}
@ -109,4 +109,4 @@ func (ApprovalWorkflowsSeeder) Count(conn *gorm.DB) (int, error) {
}
return int(workflowCount + stepCount), nil
}
}

View File

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

View File

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

View File

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

View File

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

View File

@ -1,8 +1,9 @@
package middleware
import (
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/utils/client"
"strings"
"web-medols-be/app/database/entity"
"github.com/gofiber/fiber/v2"
"github.com/google/uuid"
@ -10,8 +11,12 @@ import (
)
const (
ClientKeyHeader = "X-Client-Key"
ClientContextKey = "client_id"
ClientKeyHeader = "X-Client-Key"
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
@ -57,6 +62,7 @@ func isPathExcluded(path string) bool {
}
// 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 {
return func(c *fiber.Ctx) error {
// Check if path should be excluded from client key validation
@ -64,19 +70,65 @@ func ClientMiddleware(db *gorm.DB) fiber.Handler {
return c.Next()
}
// Extract Client Key from header
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},
})
// Check if user ID exists in context (set by auth middleware)
userID := c.Locals(UserIDContextKey)
if userID != nil {
// User authenticated - use multi-client logic
return handleAuthenticatedUser(c, db, userID)
}
// Parse UUID
clientUUID, err := uuid.Parse(clientKey)
// Fallback to X-Client-Key validation (backward compatibility)
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 {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"success": false,
@ -85,31 +137,75 @@ func ClientMiddleware(db *gorm.DB) fiber.Handler {
})
}
// Validate client exists and is active
var client entity.Clients
if err := db.Where("id = ? AND is_active = ?", clientUUID, true).First(&client).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{
// Verify user has access to this client
hasAccess, err := client.HasAccessToClient(db, userId, clientUUID, isSuperAdmin)
if err != nil || !hasAccess {
return c.Status(fiber.StatusForbidden).JSON(fiber.Map{
"success": false,
"code": 500,
"messages": []string{"Error validating Client Key"},
"code": 403,
"messages": []string{"Access denied to this client"},
})
}
// Store client ID in context for use in handlers
c.Locals(ClientContextKey, clientUUID)
return c.Next()
currentClientID = &clientUUID
} else if user.ClientId != nil {
// Use user's primary client
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 {
if clientID, ok := c.Locals(ClientContextKey).(uuid.UUID); ok {
return &clientID
@ -117,6 +213,30 @@ func GetClientID(c *fiber.Ctx) *uuid.UUID {
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
func AddExcludedPath(path string) {
excludedPaths = append(excludedPaths, path)

View File

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

View File

@ -2,10 +2,10 @@ package middleware
import (
"log"
"netidhub-saas-be/app/database"
"netidhub-saas-be/config/config"
utilsSvc "netidhub-saas-be/utils"
"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/session"

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -4,12 +4,12 @@ import (
"fmt"
"github.com/google/uuid"
"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"
"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 {

View File

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

View File

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

View File

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

View File

@ -1,17 +1,17 @@
package controller
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"
"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/rs/zerolog"
utilRes "web-medols-be/utils/response"
utilVal "web-medols-be/utils/validator"
utilRes "netidhub-saas-be/utils/response"
utilVal "netidhub-saas-be/utils/validator"
)
type advertisementController struct {

View File

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

View File

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

View File

@ -4,12 +4,12 @@ import (
"fmt"
"github.com/google/uuid"
"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"
"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 {

View File

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

View File

@ -11,19 +11,19 @@ import (
"log"
"math/rand"
"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"
"strconv"
"strings"
"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

View File

@ -3,9 +3,9 @@ package approval_workflow_steps
import (
"github.com/gofiber/fiber/v2"
"go.uber.org/fx"
"web-medols-be/app/module/approval_workflow_steps/controller"
"web-medols-be/app/module/approval_workflow_steps/repository"
"web-medols-be/app/module/approval_workflow_steps/service"
"netidhub-saas-be/app/module/approval_workflow_steps/controller"
"netidhub-saas-be/app/module/approval_workflow_steps/repository"
"netidhub-saas-be/app/module/approval_workflow_steps/service"
)
// ApprovalWorkflowStepsRouter struct of ApprovalWorkflowStepsRouter
@ -54,4 +54,4 @@ func (_i *ApprovalWorkflowStepsRouter) RegisterApprovalWorkflowStepsRoutes() {
router.Post("/bulk", approvalWorkflowStepsController.BulkSave)
router.Put("/workflow/:workflowId/reorder", approvalWorkflowStepsController.Reorder)
})
}
}

View File

@ -1,14 +1,14 @@
package controller
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"
"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/rs/zerolog"

View File

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

View File

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

View File

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

View File

@ -3,9 +3,9 @@ package approval_workflows
import (
"github.com/gofiber/fiber/v2"
"go.uber.org/fx"
"web-medols-be/app/module/approval_workflows/controller"
"web-medols-be/app/module/approval_workflows/repository"
"web-medols-be/app/module/approval_workflows/service"
"netidhub-saas-be/app/module/approval_workflows/controller"
"netidhub-saas-be/app/module/approval_workflows/repository"
"netidhub-saas-be/app/module/approval_workflows/service"
)
// ApprovalWorkflowsRouter struct of ApprovalWorkflowsRouter
@ -57,4 +57,4 @@ func (_i *ApprovalWorkflowsRouter) RegisterApprovalWorkflowsRoutes() {
router.Put("/:id/deactivate", approvalWorkflowsController.Deactivate)
router.Delete("/:id", approvalWorkflowsController.Delete)
})
}
}

View File

@ -3,15 +3,15 @@ package controller
import (
"github.com/gofiber/fiber/v2"
"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"
"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"
utilVal "web-medols-be/utils/validator"
utilRes "netidhub-saas-be/utils/response"
utilVal "netidhub-saas-be/utils/validator"
)
type approvalWorkflowsController struct {
@ -478,4 +478,4 @@ func (_i *approvalWorkflowsController) UpdateWithSteps(c *fiber.Ctx) error {
Success: true,
Messages: utilRes.Messages{"ApprovalWorkflows with steps successfully updated"},
})
}
}

View File

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

View File

@ -2,14 +2,14 @@ package repository
import (
"fmt"
"strings"
"github.com/google/uuid"
"github.com/rs/zerolog"
"web-medols-be/app/database"
"web-medols-be/app/database/entity"
approvalWorkflowStepsEntity "web-medols-be/app/database/entity"
"web-medols-be/app/module/approval_workflows/request"
"web-medols-be/utils/paginator"
"netidhub-saas-be/app/database"
"netidhub-saas-be/app/database/entity"
approvalWorkflowStepsEntity "netidhub-saas-be/app/database/entity"
"netidhub-saas-be/app/module/approval_workflows/request"
"netidhub-saas-be/utils/paginator"
"strings"
)
type approvalWorkflowsRepository struct {
@ -176,21 +176,21 @@ func (_i *approvalWorkflowsRepository) GetDefault(clientId *uuid.UUID) (workflow
// GetWorkflowSteps gets all steps for a specific workflow
func (_i *approvalWorkflowsRepository) GetWorkflowSteps(clientId *uuid.UUID, workflowId uint) (steps []*entity.ApprovalWorkflowSteps, err error) {
query := _i.DB.DB.Model(&approvalWorkflowStepsEntity.ApprovalWorkflowSteps{})
// Join with approval_workflows to check client_id
query = query.Joins("JOIN approval_workflows ON approval_workflow_steps.workflow_id = approval_workflows.id")
if clientId != nil {
query = query.Where("approval_workflows.client_id = ?", clientId)
}
query = query.Where("approval_workflow_steps.workflow_id = ?", workflowId)
query = query.Where("approval_workflows.is_active = ?", true)
query = query.Order("approval_workflow_steps.step_order ASC")
// Preload the RequiredUserLevel relation
query = query.Preload("RequiredUserLevel")
err = query.Find(&steps).Error
return steps, err
}
}

View File

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

View File

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

View File

@ -5,17 +5,17 @@ import (
"fmt"
"github.com/google/uuid"
"github.com/rs/zerolog"
"web-medols-be/app/database/entity"
"web-medols-be/app/module/approval_workflows/repository"
"web-medols-be/app/module/approval_workflows/request"
stepRepo "web-medols-be/app/module/approval_workflow_steps/repository"
"web-medols-be/utils/paginator"
"netidhub-saas-be/app/database/entity"
stepRepo "netidhub-saas-be/app/module/approval_workflow_steps/repository"
"netidhub-saas-be/app/module/approval_workflows/repository"
"netidhub-saas-be/app/module/approval_workflows/request"
"netidhub-saas-be/utils/paginator"
)
type approvalWorkflowsService struct {
ApprovalWorkflowsRepository repository.ApprovalWorkflowsRepository
ApprovalWorkflowStepsRepository stepRepo.ApprovalWorkflowStepsRepository
Log zerolog.Logger
ApprovalWorkflowsRepository repository.ApprovalWorkflowsRepository
ApprovalWorkflowStepsRepository stepRepo.ApprovalWorkflowStepsRepository
Log zerolog.Logger
}
// ApprovalWorkflowsService define interface of IApprovalWorkflowsService
@ -316,4 +316,4 @@ func (_i *approvalWorkflowsService) CanDeleteWorkflow(clientId *uuid.UUID, id ui
// TODO: Implement check for active approval flows
return true, "", nil
}
}

View File

@ -3,9 +3,9 @@ package article_approval_flows
import (
"github.com/gofiber/fiber/v2"
"go.uber.org/fx"
"web-medols-be/app/module/article_approval_flows/controller"
"web-medols-be/app/module/article_approval_flows/repository"
"web-medols-be/app/module/article_approval_flows/service"
"netidhub-saas-be/app/module/article_approval_flows/controller"
"netidhub-saas-be/app/module/article_approval_flows/repository"
"netidhub-saas-be/app/module/article_approval_flows/service"
)
// ArticleApprovalFlowsRouter struct of ArticleApprovalFlowsRouter
@ -58,4 +58,4 @@ func (_i *ArticleApprovalFlowsRouter) RegisterArticleApprovalFlowsRoutes() {
router.Put("/:id/request-revision", articleApprovalFlowsController.RequestRevision)
router.Put("/:id/resubmit", articleApprovalFlowsController.Resubmit)
})
}
}

View File

@ -1,19 +1,19 @@
package controller
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"
"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/rs/zerolog"
utilRes "web-medols-be/utils/response"
utilVal "web-medols-be/utils/validator"
utilRes "netidhub-saas-be/utils/response"
utilVal "netidhub-saas-be/utils/validator"
)
type articleApprovalFlowsController struct {

View File

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

View File

@ -2,11 +2,11 @@ package repository
import (
"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"
"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/rs/zerolog"

View File

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

View File

@ -1,10 +1,10 @@
package response
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"
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 {
@ -25,9 +25,9 @@ type ArticleApprovalFlowsResponse struct {
UpdatedAt time.Time `json:"updatedAt"`
// Relations
Article *articlesResponse.ArticlesResponse `json:"article,omitempty"`
Workflow *approvalWorkflowsResponse.ApprovalWorkflowsResponse `json:"workflow,omitempty"`
StepLogs []*articleApprovalStepLogsResponse.ArticleApprovalStepLogsResponse `json:"stepLogs,omitempty"`
Article *articlesResponse.ArticlesResponse `json:"article,omitempty"`
Workflow *approvalWorkflowsResponse.ApprovalWorkflowsResponse `json:"workflow,omitempty"`
StepLogs []*articleApprovalStepLogsResponse.ArticleApprovalStepLogsResponse `json:"stepLogs,omitempty"`
}
type ArticleApprovalFlowsDetailResponse struct {
@ -49,9 +49,9 @@ type ArticleApprovalFlowsDetailResponse struct {
UpdatedAt time.Time `json:"updatedAt"`
// Relations with full details
Article *articlesResponse.ArticlesResponse `json:"article"`
Workflow *approvalWorkflowsResponse.ApprovalWorkflowsWithStepsResponse `json:"workflow"`
StepLogs []*articleApprovalStepLogsResponse.ArticleApprovalStepLogsResponse `json:"stepLogs"`
Article *articlesResponse.ArticlesResponse `json:"article"`
Workflow *approvalWorkflowsResponse.ApprovalWorkflowsWithStepsResponse `json:"workflow"`
StepLogs []*articleApprovalStepLogsResponse.ArticleApprovalStepLogsResponse `json:"stepLogs"`
}
type ArticleApprovalFlowsSummaryResponse struct {
@ -69,16 +69,16 @@ type ArticleApprovalFlowsSummaryResponse struct {
}
type ApprovalQueueResponse struct {
ID uint `json:"id"`
ArticleID uint `json:"articleId"`
ArticleTitle string `json:"articleTitle"`
ArticleAuthor string `json:"articleAuthor"`
WorkflowName string `json:"workflowName"`
CurrentStepName string `json:"currentStepName"`
SubmittedAt time.Time `json:"submittedAt"`
DaysWaiting int `json:"daysWaiting"`
Priority string `json:"priority"`
RequiresComment bool `json:"requiresComment"`
ID uint `json:"id"`
ArticleID uint `json:"articleId"`
ArticleTitle string `json:"articleTitle"`
ArticleAuthor string `json:"articleAuthor"`
WorkflowName string `json:"workflowName"`
CurrentStepName string `json:"currentStepName"`
SubmittedAt time.Time `json:"submittedAt"`
DaysWaiting int `json:"daysWaiting"`
Priority string `json:"priority"`
RequiresComment bool `json:"requiresComment"`
}
type ApprovalDashboardStatsResponse struct {
@ -108,4 +108,4 @@ type ApprovalAnalyticsResponse struct {
TotalRevisions int `json:"totalRevisions"`
ApprovalRate float64 `json:"approvalRate"`
AverageApprovalTime float64 `json:"averageApprovalTime"` // in hours
}
}

View File

@ -2,16 +2,16 @@ package service
import (
"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"
"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/rs/zerolog"

View File

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

View File

@ -1,13 +1,13 @@
package controller
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"
"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/rs/zerolog"

View File

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

View File

@ -2,11 +2,11 @@ package repository
import (
"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"
"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/rs/zerolog"

View File

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

View File

@ -1,47 +1,47 @@
package response
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"
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 {
ID uint `json:"id"`
ApprovalFlowId uint `json:"approvalFlowId"`
StepOrder int `json:"stepOrder"`
StepName string `json:"stepName"`
ApprovedById *uint `json:"approvedById"`
Action string `json:"action"`
Message *string `json:"message"`
ProcessedAt time.Time `json:"processedAt"`
UserLevelId uint `json:"userLevelId"`
ClientId *string `json:"clientId"`
CreatedAt time.Time `json:"createdAt"`
ID uint `json:"id"`
ApprovalFlowId uint `json:"approvalFlowId"`
StepOrder int `json:"stepOrder"`
StepName string `json:"stepName"`
ApprovedById *uint `json:"approvedById"`
Action string `json:"action"`
Message *string `json:"message"`
ProcessedAt time.Time `json:"processedAt"`
UserLevelId uint `json:"userLevelId"`
ClientId *string `json:"clientId"`
CreatedAt time.Time `json:"createdAt"`
// Relations
ApprovedBy *usersResponse.UsersResponse `json:"approvedBy,omitempty"`
}
type ArticleApprovalStepLogsDetailResponse struct {
ID uint `json:"id"`
ArticleApprovalFlowID uint `json:"articleApprovalFlowId"`
WorkflowStepID uint `json:"workflowStepId"`
ApproverUserID *uint `json:"approverUserId"`
ApprovalStatusID uint `json:"approvalStatusId"`
ApprovalStatusName *string `json:"approvalStatusName,omitempty"`
Comments *string `json:"comments"`
ApprovedAt *time.Time `json:"approvedAt"`
DueDate *time.Time `json:"dueDate"`
IsAutoApproved bool `json:"isAutoApproved"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
ID uint `json:"id"`
ArticleApprovalFlowID uint `json:"articleApprovalFlowId"`
WorkflowStepID uint `json:"workflowStepId"`
ApproverUserID *uint `json:"approverUserId"`
ApprovalStatusID uint `json:"approvalStatusId"`
ApprovalStatusName *string `json:"approvalStatusName,omitempty"`
Comments *string `json:"comments"`
ApprovedAt *time.Time `json:"approvedAt"`
DueDate *time.Time `json:"dueDate"`
IsAutoApproved bool `json:"isAutoApproved"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
// Relations with full details
WorkflowStep *approvalWorkflowStepsResponse.ApprovalWorkflowStepsResponse `json:"workflowStep,omitempty"`
ApproverUser *usersResponse.UsersResponse `json:"approverUser,omitempty"`
Article *articlesResponse.ArticlesResponse `json:"article,omitempty"`
ApproverUser *usersResponse.UsersResponse `json:"approverUser,omitempty"`
Article *articlesResponse.ArticlesResponse `json:"article,omitempty"`
}
type ArticleApprovalStepLogsSummaryResponse struct {
@ -58,12 +58,12 @@ type ArticleApprovalStepLogsSummaryResponse struct {
}
type ApprovalHistoryResponse struct {
ArticleID uint `json:"articleId"`
ArticleTitle string `json:"articleTitle"`
WorkflowName string `json:"workflowName"`
StartedAt time.Time `json:"startedAt"`
CompletedAt *time.Time `json:"completedAt"`
CurrentStep *string `json:"currentStep"`
ArticleID uint `json:"articleId"`
ArticleTitle string `json:"articleTitle"`
WorkflowName string `json:"workflowName"`
StartedAt time.Time `json:"startedAt"`
CompletedAt *time.Time `json:"completedAt"`
CurrentStep *string `json:"currentStep"`
Steps []ArticleApprovalStepLogsSummaryResponse `json:"steps"`
}
@ -88,4 +88,4 @@ type UserApprovalStatsResponse struct {
RejectedCount int `json:"rejectedCount"`
AverageProcessingTime float64 `json:"averageProcessingTime"` // in hours
OverdueCount int `json:"overdueCount"`
}
}

View File

@ -3,13 +3,13 @@ package service
import (
"errors"
"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"
"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/rs/zerolog"

View File

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

View File

@ -1,17 +1,17 @@
package controller
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"
"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/rs/zerolog"
utilRes "web-medols-be/utils/response"
utilVal "web-medols-be/utils/validator"
utilRes "netidhub-saas-be/utils/response"
utilVal "netidhub-saas-be/utils/validator"
)
type articleApprovalsController struct {

View File

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

View File

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

View File

@ -3,12 +3,12 @@ package repository
import (
"fmt"
"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"
"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 {

View File

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

View File

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

View File

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

View File

@ -1,16 +1,16 @@
package controller
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"
"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"
utilRes "web-medols-be/utils/response"
utilVal "web-medols-be/utils/validator"
utilRes "netidhub-saas-be/utils/response"
utilVal "netidhub-saas-be/utils/validator"
)
type articleCategoriesController struct {

View File

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

View File

@ -1,10 +1,10 @@
package mapper
import (
"netidhub-saas-be/app/database/entity"
res "netidhub-saas-be/app/module/article_categories/response"
"strconv"
"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) {

View File

@ -4,12 +4,12 @@ import (
"fmt"
"github.com/google/uuid"
"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"
"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 {

View File

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

View File

@ -10,20 +10,20 @@ import (
"log"
"math/rand"
"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"
"strconv"
"strings"
"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

View File

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

View File

@ -1,15 +1,15 @@
package controller
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"
"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"
utilRes "web-medols-be/utils/response"
utilVal "web-medols-be/utils/validator"
utilRes "netidhub-saas-be/utils/response"
utilVal "netidhub-saas-be/utils/validator"
)
type articleCategoryDetailsController struct {

View File

@ -1,6 +1,6 @@
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 {
ArticleCategoryDetails ArticleCategoryDetailsController

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,13 +1,13 @@
package controller
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"
"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/rs/zerolog"

View File

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

View File

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

View File

@ -4,12 +4,12 @@ import (
"fmt"
"github.com/google/uuid"
"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"
"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 {

View File

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

View File

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

View File

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

View File

@ -2,13 +2,13 @@ package controller
import (
"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"
"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"
)

View File

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

View File

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

View File

@ -3,12 +3,12 @@ package repository
import (
"fmt"
"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"
"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 {

View File

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

View File

@ -12,19 +12,19 @@ import (
"math/rand"
"mime"
"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"
"path/filepath"
"strconv"
"strings"
"sync"
"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

View File

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

View File

@ -1,12 +1,12 @@
package controller
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"
"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/rs/zerolog"

View File

@ -2,7 +2,7 @@ package controller
import (
"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 {

View File

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

View File

@ -3,11 +3,11 @@ package repository
import (
"fmt"
"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"
"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 {

View File

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

View File

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

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