[Oracle] 테이블을 기준으로 Controller을 자동으로 만들어 주는 프로시저

전상훈·2021년 5월 14일
0

오라클

목록 보기
3/7
CREATE OR REPLACE PROCEDURE UNIVCOOP_DEV.PROC_TABLE_TO_CONTROLLER
(
	V_TABLE_NAME IN VARCHAR2,
	V_BASE_URL IN VARCHAR2,
	SQL_DESC OUT VARCHAR2
)
IS
	V_BASE_CLASS VARCHAR(20) := '';
	V_TABLE_COMMENT VARCHAR(50) := '';
   
BEGIN
	SQL_DESC := '';
 

	SELECT  B.COMMENTS INTO V_TABLE_COMMENT
	FROM   ALL_TABLES A, ALL_TAB_COMMENTS B
	WHERE  A.TABLE_NAME = B.TABLE_NAME
	  AND  A.TABLE_NAME = V_TABLE_NAME
	ORDER BY A.TABLE_NAME;

	SELECT REPLACE(INITCAP( V_TABLE_NAME  ),'_','') INTO V_BASE_CLASS FROM DUAL;
    
	SQL_DESC := SQL_DESC || '/** ' || V_BASE_CLASS || 'Controller  */';

	SQL_DESC := SQL_DESC || '@Api(tags = { "' || V_TABLE_COMMENT || '" }, value = "' || V_BASE_CLASS || 'Controller")' || CHR(13);
	SQL_DESC := SQL_DESC || '@Slf4j' || CHR(13);
	SQL_DESC := SQL_DESC || '@RequestMapping("' || V_BASE_URL || '/")' || CHR(13);
	SQL_DESC := SQL_DESC || '@RestController' || CHR(13);
	SQL_DESC := SQL_DESC || 'public class ' || V_BASE_CLASS || 'Controller implements BossDBController<' || V_BASE_CLASS || 'DtoReq, ' || V_BASE_CLASS || 'Dto> {' || CHR(13);
	SQL_DESC := SQL_DESC || '    private final ' || V_BASE_CLASS || 'Service service;' || CHR(13);
	SQL_DESC := SQL_DESC || '' || CHR(13);
	SQL_DESC := SQL_DESC || '    public ' || V_BASE_CLASS || 'Controller(' || V_BASE_CLASS || 'Service service) {' || CHR(13);
	SQL_DESC := SQL_DESC || '        this.service = service;' || CHR(13);
	SQL_DESC := SQL_DESC || '    }' || CHR(13);
	SQL_DESC := SQL_DESC || '' || CHR(13);
	SQL_DESC := SQL_DESC || '    @ApiOperation(value = "' || V_TABLE_COMMENT || ' 조회 ", notes = "' || V_TABLE_COMMENT || ' 조회입니다.")' || CHR(13);
	SQL_DESC := SQL_DESC || '    @PostMapping("getList")' || CHR(13);
	SQL_DESC := SQL_DESC || '    public BossResponseEntityList<' || V_BASE_CLASS || 'Dto> getList(@RequestBody ' || V_BASE_CLASS || 'DtoReq req) throws Exception {' || CHR(13);
	SQL_DESC := SQL_DESC || '        Global.getLogInfo().info(log, "' || V_TABLE_COMMENT || ' 조회" , "' || V_BASE_URL || 'getList >>> " + req);' || CHR(13);
	SQL_DESC := SQL_DESC || '        return new BossResponseEntityList(service.getList(req), HttpStatus.OK);' || CHR(13);
	SQL_DESC := SQL_DESC || '    }' || CHR(13);
	SQL_DESC := SQL_DESC || '' || CHR(13);
	SQL_DESC := SQL_DESC || '    @ApiOperation(value = "' || V_TABLE_COMMENT || ' 저장 ", notes = "' || V_TABLE_COMMENT || ' 저장입니다.")' || CHR(13);
	SQL_DESC := SQL_DESC || '    @PostMapping("insert")' || CHR(13);
	SQL_DESC := SQL_DESC || '    @Override' || CHR(13);
	SQL_DESC := SQL_DESC || '    public BossResponseEntityData<ApiDto> insert(@RequestBody ' || V_BASE_CLASS || 'Dto data) throws Exception {' || CHR(13);
	SQL_DESC := SQL_DESC || '        Global.getLogInfo().info(log, "' || V_TABLE_COMMENT || ' 저장" , "' || V_BASE_URL || 'insert >>> " + data);' || CHR(13);
	SQL_DESC := SQL_DESC || '        return new BossResponseEntityData(service.insert(data), HttpStatus.OK);' || CHR(13);
	SQL_DESC := SQL_DESC || '    }' || CHR(13);
	SQL_DESC := SQL_DESC || '' || CHR(13);
	SQL_DESC := SQL_DESC || '    @ApiOperation(value = "' || V_TABLE_COMMENT || ' 수정 ", notes = "' || V_TABLE_COMMENT || ' 수정입니다.")' || CHR(13);
	SQL_DESC := SQL_DESC || '    @PostMapping("update")' || CHR(13);
	SQL_DESC := SQL_DESC || '    @Override' || CHR(13);
	SQL_DESC := SQL_DESC || '    public BossResponseEntityData<ApiDto> update(@RequestBody ' || V_BASE_CLASS || 'Dto data) throws Exception {' || CHR(13);
	SQL_DESC := SQL_DESC || '        Global.getLogInfo().info(log, "' || V_TABLE_COMMENT || ' 수정" , "' || V_BASE_URL || 'update >>> " + data);' || CHR(13);
	SQL_DESC := SQL_DESC || '        return new BossResponseEntityData(service.update(data), HttpStatus.OK);' || CHR(13);
	SQL_DESC := SQL_DESC || '    }' || CHR(13);
	SQL_DESC := SQL_DESC || '' || CHR(13);
	SQL_DESC := SQL_DESC || '    @ApiOperation(value = "' || V_TABLE_COMMENT || ' 삭제 ", notes = "' || V_TABLE_COMMENT || ' 삭제입니다.")' || CHR(13);
	SQL_DESC := SQL_DESC || '    @PostMapping("delete")' || CHR(13);
	SQL_DESC := SQL_DESC || '    @Override' || CHR(13);
	SQL_DESC := SQL_DESC || '    public BossResponseEntityData<ApiDto> delete(@RequestBody ' || V_BASE_CLASS || 'DtoReq req) throws Exception {' || CHR(13);
	SQL_DESC := SQL_DESC || '        Global.getLogInfo().info(log, "' || V_TABLE_COMMENT || ' 삭제" , "' || V_BASE_URL || 'delete >>> " + req);' || CHR(13);
	SQL_DESC := SQL_DESC || '        return new BossResponseEntityData(service.delete(req), HttpStatus.OK);' || CHR(13);
	SQL_DESC := SQL_DESC || '    }' || CHR(13);
	SQL_DESC := SQL_DESC || '}' || CHR(13);
END;
profile
개발을 하는 사람

0개의 댓글