Production deployment with Docker and full system fixes

- Added Docker support (Dockerfiles, docker-compose.yml)
- Fixed authentication and authorization (token storage, CORS, permissions)
- Fixed API response transformations for all modules
- Added production deployment scripts and guides
- Fixed frontend permission checks and module access
- Added database seeding script for production
- Complete documentation for deployment and configuration

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Talal Sharabi
2026-02-11 11:25:20 +04:00
parent 35daa52767
commit f31d71ff5a
52 changed files with 9359 additions and 1578 deletions

View File

@@ -0,0 +1,140 @@
import { api } from '../api'
// Users API
export interface User {
id: string
email: string
username: string
status: string
employeeId?: string
employee?: any
createdAt: string
updatedAt: string
}
export interface CreateUserData {
email: string
username: string
password: string
employeeId?: string
}
export interface UpdateUserData {
email?: string
username?: string
password?: string
status?: string
employeeId?: string
}
export const usersAPI = {
getAll: async (): Promise<User[]> => {
const response = await api.get('/auth/users')
return response.data.data || response.data
},
getById: async (id: string): Promise<User> => {
const response = await api.get(`/auth/users/${id}`)
return response.data.data
},
create: async (data: CreateUserData): Promise<User> => {
const response = await api.post('/auth/register', data)
return response.data.data
},
update: async (id: string, data: UpdateUserData): Promise<User> => {
const response = await api.put(`/auth/users/${id}`, data)
return response.data.data
},
delete: async (id: string): Promise<void> => {
await api.delete(`/auth/users/${id}`)
}
}
// Roles & Permissions API
export interface Role {
id: string
name: string
nameAr?: string
permissions: Permission[]
}
export interface Permission {
id: string
module: string
resource: string
action: string
}
export const rolesAPI = {
getAll: async (): Promise<Role[]> => {
const response = await api.get('/admin/roles')
return response.data.data || []
},
update: async (id: string, permissions: Permission[]): Promise<Role> => {
const response = await api.put(`/admin/roles/${id}/permissions`, { permissions })
return response.data.data
}
}
// Audit Logs API
export interface AuditLog {
id: string
entityType: string
entityId: string
action: string
userId: string
user?: any
changes?: any
createdAt: string
}
export const auditLogsAPI = {
getAll: async (filters?: any): Promise<AuditLog[]> => {
const params = new URLSearchParams()
if (filters?.entityType) params.append('entityType', filters.entityType)
if (filters?.action) params.append('action', filters.action)
if (filters?.startDate) params.append('startDate', filters.startDate)
if (filters?.endDate) params.append('endDate', filters.endDate)
const response = await api.get(`/admin/audit-logs?${params.toString()}`)
return response.data.data || []
}
}
// System Settings API
export interface SystemSetting {
key: string
value: any
description?: string
}
export const settingsAPI = {
getAll: async (): Promise<SystemSetting[]> => {
const response = await api.get('/admin/settings')
return response.data.data || []
},
update: async (key: string, value: any): Promise<SystemSetting> => {
const response = await api.put(`/admin/settings/${key}`, { value })
return response.data.data
}
}
// System Health API
export interface SystemHealth {
status: string
database: string
memory: any
uptime: number
}
export const healthAPI = {
check: async (): Promise<SystemHealth> => {
const response = await api.get('/admin/health')
return response.data.data || response.data
}
}