initial commit
This commit is contained in:
parent
4d9b323691
commit
53e56ea285
|
|
@ -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
|
||||
|
|
@ -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"
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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()"`
|
||||
}
|
||||
|
|
@ -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()"`
|
||||
}
|
||||
|
|
@ -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"
|
||||
}
|
||||
|
|
@ -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()"`
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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{}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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{}
|
||||
|
|
|
|||
|
|
@ -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{}
|
||||
|
|
|
|||
|
|
@ -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{},
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"},
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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"`
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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"`
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
Loading…
Reference in New Issue