; Please enter a commit message to explain why this merge is necessary,
; especially if it merges an updated upstream into a topic branch.
;
; Lines starting with ';' will be ignored, and an empty message aborts
; the commit.
This commit is contained in:
leeheejin 2026-01-15 12:07:51 +09:00
commit 220ce57be1
1 changed files with 46 additions and 45 deletions

View File

@ -2,6 +2,7 @@ import { Request, Response } from "express";
import { getPool } from "../database/db"; import { getPool } from "../database/db";
import { logger } from "../utils/logger"; import { logger } from "../utils/logger";
import { MultiLangService } from "../services/multilangService"; import { MultiLangService } from "../services/multilangService";
import { AuthenticatedRequest } from "../types/auth";
// pool 인스턴스 가져오기 // pool 인스턴스 가져오기
const pool = getPool(); const pool = getPool();
@ -14,9 +15,9 @@ const multiLangService = new MultiLangService();
// ============================================================ // ============================================================
// 화면 그룹 목록 조회 // 화면 그룹 목록 조회
export const getScreenGroups = async (req: Request, res: Response) => { export const getScreenGroups = async (req: AuthenticatedRequest, res: Response) => {
try { try {
const companyCode = (req.user as any).companyCode; const companyCode = req.user!.companyCode;
const { page = 1, size = 20, searchTerm } = req.query; const { page = 1, size = 20, searchTerm } = req.query;
const offset = (parseInt(page as string) - 1) * parseInt(size as string); const offset = (parseInt(page as string) - 1) * parseInt(size as string);
@ -88,10 +89,10 @@ export const getScreenGroups = async (req: Request, res: Response) => {
}; };
// 화면 그룹 상세 조회 // 화면 그룹 상세 조회
export const getScreenGroup = async (req: Request, res: Response) => { export const getScreenGroup = async (req: AuthenticatedRequest, res: Response) => {
try { try {
const { id } = req.params; const { id } = req.params;
const companyCode = (req.user as any).companyCode; const companyCode = req.user!.companyCode;
let query = ` let query = `
SELECT sg.*, SELECT sg.*,
@ -134,10 +135,10 @@ export const getScreenGroup = async (req: Request, res: Response) => {
}; };
// 화면 그룹 생성 // 화면 그룹 생성
export const createScreenGroup = async (req: Request, res: Response) => { export const createScreenGroup = async (req: AuthenticatedRequest, res: Response) => {
try { try {
const userCompanyCode = (req.user as any).companyCode; const userCompanyCode = req.user!.companyCode;
const userId = (req.user as any).userId; const userId = req.user!.userId;
const { group_name, group_code, main_table_name, description, icon, display_order, is_active, parent_group_id, target_company_code } = req.body; const { group_name, group_code, main_table_name, description, icon, display_order, is_active, parent_group_id, target_company_code } = req.body;
if (!group_name || !group_code) { if (!group_name || !group_code) {
@ -249,10 +250,10 @@ export const createScreenGroup = async (req: Request, res: Response) => {
}; };
// 화면 그룹 수정 // 화면 그룹 수정
export const updateScreenGroup = async (req: Request, res: Response) => { export const updateScreenGroup = async (req: AuthenticatedRequest, res: Response) => {
try { try {
const { id } = req.params; const { id } = req.params;
const userCompanyCode = (req.user as any).companyCode; const userCompanyCode = req.user!.companyCode;
const { group_name, group_code, main_table_name, description, icon, display_order, is_active, parent_group_id, target_company_code } = req.body; const { group_name, group_code, main_table_name, description, icon, display_order, is_active, parent_group_id, target_company_code } = req.body;
// 회사 코드 결정: 최고 관리자가 특정 회사를 선택한 경우 해당 회사로, 아니면 현재 그룹의 회사 유지 // 회사 코드 결정: 최고 관리자가 특정 회사를 선택한 경우 해당 회사로, 아니면 현재 그룹의 회사 유지
@ -338,10 +339,10 @@ export const updateScreenGroup = async (req: Request, res: Response) => {
}; };
// 화면 그룹 삭제 // 화면 그룹 삭제
export const deleteScreenGroup = async (req: Request, res: Response) => { export const deleteScreenGroup = async (req: AuthenticatedRequest, res: Response) => {
try { try {
const { id } = req.params; const { id } = req.params;
const companyCode = (req.user as any).companyCode; const companyCode = req.user!.companyCode;
let query = `DELETE FROM screen_groups WHERE id = $1`; let query = `DELETE FROM screen_groups WHERE id = $1`;
const params: any[] = [id]; const params: any[] = [id];
@ -374,10 +375,10 @@ export const deleteScreenGroup = async (req: Request, res: Response) => {
// ============================================================ // ============================================================
// 그룹에 화면 추가 // 그룹에 화면 추가
export const addScreenToGroup = async (req: Request, res: Response) => { export const addScreenToGroup = async (req: AuthenticatedRequest, res: Response) => {
try { try {
const companyCode = (req.user as any).companyCode; const companyCode = req.user!.companyCode;
const userId = (req.user as any).userId; const userId = req.user!.userId;
const { group_id, screen_id, screen_role, display_order, is_default } = req.body; const { group_id, screen_id, screen_role, display_order, is_default } = req.body;
if (!group_id || !screen_id) { if (!group_id || !screen_id) {
@ -414,10 +415,10 @@ export const addScreenToGroup = async (req: Request, res: Response) => {
}; };
// 그룹에서 화면 제거 // 그룹에서 화면 제거
export const removeScreenFromGroup = async (req: Request, res: Response) => { export const removeScreenFromGroup = async (req: AuthenticatedRequest, res: Response) => {
try { try {
const { id } = req.params; const { id } = req.params;
const companyCode = (req.user as any).companyCode; const companyCode = req.user!.companyCode;
let query = `DELETE FROM screen_group_screens WHERE id = $1`; let query = `DELETE FROM screen_group_screens WHERE id = $1`;
const params: any[] = [id]; const params: any[] = [id];
@ -445,10 +446,10 @@ export const removeScreenFromGroup = async (req: Request, res: Response) => {
}; };
// 그룹 내 화면 순서/역할 수정 // 그룹 내 화면 순서/역할 수정
export const updateScreenInGroup = async (req: Request, res: Response) => { export const updateScreenInGroup = async (req: AuthenticatedRequest, res: Response) => {
try { try {
const { id } = req.params; const { id } = req.params;
const companyCode = (req.user as any).companyCode; const companyCode = req.user!.companyCode;
const { screen_role, display_order, is_default } = req.body; const { screen_role, display_order, is_default } = req.body;
let query = ` let query = `
@ -484,9 +485,9 @@ export const updateScreenInGroup = async (req: Request, res: Response) => {
// ============================================================ // ============================================================
// 화면 필드 조인 목록 조회 // 화면 필드 조인 목록 조회
export const getFieldJoins = async (req: Request, res: Response) => { export const getFieldJoins = async (req: AuthenticatedRequest, res: Response) => {
try { try {
const companyCode = (req.user as any).companyCode; const companyCode = req.user!.companyCode;
const { screen_id } = req.query; const { screen_id } = req.query;
let query = ` let query = `
@ -525,10 +526,10 @@ export const getFieldJoins = async (req: Request, res: Response) => {
}; };
// 화면 필드 조인 생성 // 화면 필드 조인 생성
export const createFieldJoin = async (req: Request, res: Response) => { export const createFieldJoin = async (req: AuthenticatedRequest, res: Response) => {
try { try {
const companyCode = (req.user as any).companyCode; const companyCode = req.user!.companyCode;
const userId = (req.user as any).userId; const userId = req.user!.userId;
const { const {
screen_id, layout_id, component_id, field_name, screen_id, layout_id, component_id, field_name,
save_table, save_column, join_table, join_column, display_column, save_table, save_column, join_table, join_column, display_column,
@ -566,10 +567,10 @@ export const createFieldJoin = async (req: Request, res: Response) => {
}; };
// 화면 필드 조인 수정 // 화면 필드 조인 수정
export const updateFieldJoin = async (req: Request, res: Response) => { export const updateFieldJoin = async (req: AuthenticatedRequest, res: Response) => {
try { try {
const { id } = req.params; const { id } = req.params;
const companyCode = (req.user as any).companyCode; const companyCode = req.user!.companyCode;
const { const {
layout_id, component_id, field_name, layout_id, component_id, field_name,
save_table, save_column, join_table, join_column, display_column, save_table, save_column, join_table, join_column, display_column,
@ -611,10 +612,10 @@ export const updateFieldJoin = async (req: Request, res: Response) => {
}; };
// 화면 필드 조인 삭제 // 화면 필드 조인 삭제
export const deleteFieldJoin = async (req: Request, res: Response) => { export const deleteFieldJoin = async (req: AuthenticatedRequest, res: Response) => {
try { try {
const { id } = req.params; const { id } = req.params;
const companyCode = (req.user as any).companyCode; const companyCode = req.user!.companyCode;
let query = `DELETE FROM screen_field_joins WHERE id = $1`; let query = `DELETE FROM screen_field_joins WHERE id = $1`;
const params: any[] = [id]; const params: any[] = [id];
@ -645,9 +646,9 @@ export const deleteFieldJoin = async (req: Request, res: Response) => {
// ============================================================ // ============================================================
// 데이터 흐름 목록 조회 // 데이터 흐름 목록 조회
export const getDataFlows = async (req: Request, res: Response) => { export const getDataFlows = async (req: AuthenticatedRequest, res: Response) => {
try { try {
const companyCode = (req.user as any).companyCode; const companyCode = req.user!.companyCode;
const { group_id, source_screen_id } = req.query; const { group_id, source_screen_id } = req.query;
let query = ` let query = `
@ -695,10 +696,10 @@ export const getDataFlows = async (req: Request, res: Response) => {
}; };
// 데이터 흐름 생성 // 데이터 흐름 생성
export const createDataFlow = async (req: Request, res: Response) => { export const createDataFlow = async (req: AuthenticatedRequest, res: Response) => {
try { try {
const companyCode = (req.user as any).companyCode; const companyCode = req.user!.companyCode;
const userId = (req.user as any).userId; const userId = req.user!.userId;
const { const {
group_id, source_screen_id, source_action, target_screen_id, target_action, group_id, source_screen_id, source_action, target_screen_id, target_action,
data_mapping, flow_type, flow_label, condition_expression, is_active data_mapping, flow_type, flow_label, condition_expression, is_active
@ -734,10 +735,10 @@ export const createDataFlow = async (req: Request, res: Response) => {
}; };
// 데이터 흐름 수정 // 데이터 흐름 수정
export const updateDataFlow = async (req: Request, res: Response) => { export const updateDataFlow = async (req: AuthenticatedRequest, res: Response) => {
try { try {
const { id } = req.params; const { id } = req.params;
const companyCode = (req.user as any).companyCode; const companyCode = req.user!.companyCode;
const { const {
group_id, source_screen_id, source_action, target_screen_id, target_action, group_id, source_screen_id, source_action, target_screen_id, target_action,
data_mapping, flow_type, flow_label, condition_expression, is_active data_mapping, flow_type, flow_label, condition_expression, is_active
@ -777,10 +778,10 @@ export const updateDataFlow = async (req: Request, res: Response) => {
}; };
// 데이터 흐름 삭제 // 데이터 흐름 삭제
export const deleteDataFlow = async (req: Request, res: Response) => { export const deleteDataFlow = async (req: AuthenticatedRequest, res: Response) => {
try { try {
const { id } = req.params; const { id } = req.params;
const companyCode = (req.user as any).companyCode; const companyCode = req.user!.companyCode;
let query = `DELETE FROM screen_data_flows WHERE id = $1`; let query = `DELETE FROM screen_data_flows WHERE id = $1`;
const params: any[] = [id]; const params: any[] = [id];
@ -811,9 +812,9 @@ export const deleteDataFlow = async (req: Request, res: Response) => {
// ============================================================ // ============================================================
// 화면-테이블 관계 목록 조회 // 화면-테이블 관계 목록 조회
export const getTableRelations = async (req: Request, res: Response) => { export const getTableRelations = async (req: AuthenticatedRequest, res: Response) => {
try { try {
const companyCode = (req.user as any).companyCode; const companyCode = req.user!.companyCode;
const { screen_id, group_id } = req.query; const { screen_id, group_id } = req.query;
let query = ` let query = `
@ -860,10 +861,10 @@ export const getTableRelations = async (req: Request, res: Response) => {
}; };
// 화면-테이블 관계 생성 // 화면-테이블 관계 생성
export const createTableRelation = async (req: Request, res: Response) => { export const createTableRelation = async (req: AuthenticatedRequest, res: Response) => {
try { try {
const companyCode = (req.user as any).companyCode; const companyCode = req.user!.companyCode;
const userId = (req.user as any).userId; const userId = req.user!.userId;
const { group_id, screen_id, table_name, relation_type, crud_operations, description, is_active } = req.body; const { group_id, screen_id, table_name, relation_type, crud_operations, description, is_active } = req.body;
if (!screen_id || !table_name) { if (!screen_id || !table_name) {
@ -893,10 +894,10 @@ export const createTableRelation = async (req: Request, res: Response) => {
}; };
// 화면-테이블 관계 수정 // 화면-테이블 관계 수정
export const updateTableRelation = async (req: Request, res: Response) => { export const updateTableRelation = async (req: AuthenticatedRequest, res: Response) => {
try { try {
const { id } = req.params; const { id } = req.params;
const companyCode = (req.user as any).companyCode; const companyCode = req.user!.companyCode;
const { group_id, table_name, relation_type, crud_operations, description, is_active } = req.body; const { group_id, table_name, relation_type, crud_operations, description, is_active } = req.body;
let query = ` let query = `
@ -928,10 +929,10 @@ export const updateTableRelation = async (req: Request, res: Response) => {
}; };
// 화면-테이블 관계 삭제 // 화면-테이블 관계 삭제
export const deleteTableRelation = async (req: Request, res: Response) => { export const deleteTableRelation = async (req: AuthenticatedRequest, res: Response) => {
try { try {
const { id } = req.params; const { id } = req.params;
const companyCode = (req.user as any).companyCode; const companyCode = req.user!.companyCode;
let query = `DELETE FROM screen_table_relations WHERE id = $1`; let query = `DELETE FROM screen_table_relations WHERE id = $1`;
const params: any[] = [id]; const params: any[] = [id];