using Vo;
using Microsoft.AspNetCore.Mvc;
using Model;
using Services;
using Model.Base;
using Vo.Admin;
using Mapster;
using Infrastructure;
using Dto.Admin;
using Util;
using Tasks;
namespace Controllers.Admin
{
///
/// DatabaseField)Controller
///
// [Route("${Router}$")]
// [ApiExplorerSettings(GroupName = "DatabaseField")]
public class DatabaseFieldController : BaseController
{
private readonly IDatabaseFieldService _DatabaseFieldService;
private readonly IDatabaseFieldTabsService _DatabaseFieldTabsService;
private readonly IDatabaseTableService _DatabaseTableService;
private readonly IDatabaseInfoService _DatabaseInfoService;
public DatabaseFieldController(IDatabaseFieldService DatabaseFieldService, IDatabaseFieldTabsService DatabaseFieldTabsService, IDatabaseTableService DatabaseTableService, IDatabaseInfoService DatabaseInfoService)
{
_DatabaseFieldService = DatabaseFieldService;
_DatabaseFieldTabsService = DatabaseFieldTabsService;
_DatabaseTableService = DatabaseTableService;
_DatabaseInfoService = DatabaseInfoService;
}
/// 分页参数
///
/// 列表
///
/// 分页对象
/// 参数请求体
/// 列表
[HttpGet]
[Route("/v1/omega_source/DatabaseField/getDatabaseFieldList")]
public IActionResult getDatabaseFieldList([FromQuery] PagerInfo page, [FromQuery] DatabaseField param)
{
var response = _DatabaseFieldService.getDatabaseFieldList(page, param);
return SUCCESS(response);
}
///
/// 详情
///
/// 参数请求体
/// 详情
[HttpGet]
[Route("/v1/omega_source/DatabaseField/getDatabaseFieldQuery")]
public IActionResult getDatabaseFieldQuery([FromQuery] DatabaseField param)
{
var response = _DatabaseFieldService.GetFirst(m => m.id == param.id) ?? new DatabaseField();
return SUCCESS(response);
}
///
/// 添加
///
/// 参数请求体
/// 添加
[HttpPost]
[Route("/v1/omega_source/DatabaseField/addDatabaseField")]
public IActionResult addDatabaseField([FromBody] AddDatabaseFieldDto param)
{
var modal = param.Adapt().ToCreate(HttpContext);
modal.tabId = _DatabaseFieldTabsService.AddDatabaseFieldTabs(param.tabId, param.tableId);
if((modal.fieldType == "int" || modal.fieldType == "bigint" || modal.fieldType == "decimal" || modal.fieldType == "numeric" || modal.fieldType == "bit") && modal.autoIncrement == false)
{
modal.fieldDefaultValue = "0";
}
if(modal.databaseId == 0)
{
var table = _DatabaseTableService.GetFirst(m => m.id == param.tableId) ?? new DatabaseTable();
modal.databaseId = table.databaseId;
}
var response = _DatabaseFieldService.InsertReturnIdentity(modal);
return SUCCESS(response);
}
///
/// 修改
///
/// 参数请求体
/// 修改
[HttpPut]
[Route("/v1/omega_source/DatabaseField/updateDatabaseField")]
public IActionResult updateDatabaseField([FromBody] AddDatabaseFieldDto param)
{
var modal = param.Adapt().ToUpdate(HttpContext);
modal.tabId = _DatabaseFieldTabsService.AddDatabaseFieldTabs(param.tabId, param.tableId);
if((modal.fieldType == "int" || modal.fieldType == "bigint" || modal.fieldType == "decimal" || modal.fieldType == "numeric" || modal.fieldType == "bit") && string.IsNullOrEmpty(modal.fieldDefaultValue) && modal.autoIncrement == false)
{
modal.fieldDefaultValue = "0";
}
var response = _DatabaseFieldService.Update(modal, true);
return SUCCESS(response);
}
///
/// 删除
///
/// ID
/// 删除
[HttpDelete]
[Route("/v1/omega_source/DatabaseField/deleteDatabaseField/{id}")]
public IActionResult deleteDatabaseField(int id)
{
var response = _DatabaseFieldService.Delete(id);
return SUCCESS(response);
}
///
/// 批量删除
///
/// 参数请求体
/// 批量删除
[HttpPut]
[Route("/v1/omega_source/DatabaseField/batchDeleteDatabaseField")]
public IActionResult batchDeleteDatabaseField([FromBody] BatchDeleteApiInfoDto param)
{
foreach(var id in param.idList)
{
_DatabaseFieldService.Delete(id);
}
return SUCCESS("ok");
}
///
/// 修改字段属性
///
/// 参数请求体
/// 修改字段属性
[HttpPut]
[Route("/v1/omega_source/DatabaseField/updateDatabaseFieldAttr")]
public IActionResult updateDatabaseFieldAttr([FromBody] List param)
{
foreach(UpdateDatabaseFieldAttrDto sub in param)
{
var modal = sub.Adapt().ToUpdate(HttpContext);
var item = _DatabaseFieldService.GetFirst(m => m.id == sub.id);
if(item != null)
{
item.showList = sub.showList;
item.showEdit = sub.showEdit;
item.showQuery = sub.showQuery;
item.exportFlag = sub.exportFlag;
item.importFlag = sub.importFlag;
_DatabaseFieldService.Update(item);
}
}
return SUCCESS("ok");
}
///
/// 克隆字段
///
/// 参数请求体
/// 克隆字段
[HttpPost]
[Route("/v1/omega_source/DatabaseField/copyDatabaseField")]
public IActionResult copyDatabaseField([FromBody] CopyDatabaseFieldDto param)
{
var targetTable = _DatabaseTableService.GetFirst(m => m.id == param.targetTableId) ?? new DatabaseTable();
_DatabaseFieldService.copyDatabaseField(param, targetTable);
return SUCCESS("ok");
}
///
/// 生成
///
/// 参数请求体
/// 生成
[HttpPut]
[Route("/v1/omega_source/DatabaseField/makeDatabaseField")]
public IActionResult makeDatabaseField([FromBody] MakeDatabaseFieldDto param)
{
if(param.id.Length == 0)
{
return ToResponse(ResultCode.FAIL, "字段ID不能为空");
}
var fieldId = param.id[0];
var databaseField = _DatabaseFieldService.GetFirst(m => m.id == fieldId) ?? new DatabaseField();
var databaseInfo = _DatabaseInfoService.GetFirst(m => m.id == databaseField.databaseId) ?? new DatabaseInfo();
TokenModel loginUser = JwtUtil.GetLoginUser(HttpContext);
string res = _DatabaseFieldService.makeDatabaseField(param, databaseInfo, new DatabaseTable(), loginUser);
string id = MakeHelper.Instance.DoQueue(res);
Dictionary dic = new Dictionary();
dic.Add("makeObjectId", id);
return SUCCESS(dic);
}
///
/// 字段类型列表
///
/// 参数请求体
/// 字段类型列表
[HttpGet]
[Route("/v1/omega_source/DatabaseField/getDatabaseFieldTypeList")]
public IActionResult getDatabaseFieldTypeList([FromQuery] GetDatabaseFieldTypeListDto param)
{
var dbInfo = _DatabaseInfoService.GetFirst(m => m.id == param.databaseId) ?? new DatabaseInfo();
List fieldTypeList = new();
if (dbInfo.dbType == "mysql")
{
fieldTypeList.Add("varchar");
fieldTypeList.Add("char");
fieldTypeList.Add("int");
fieldTypeList.Add("bigint");
fieldTypeList.Add("numeric");
fieldTypeList.Add("datetime");
fieldTypeList.Add("bit");
fieldTypeList.Add("longtext");
fieldTypeList.Add("mediumtext");
fieldTypeList.Add("json");
fieldTypeList.Add("enum");
}
else if(dbInfo.dbType == "pgsql")
{
fieldTypeList.Add("varchar");
fieldTypeList.Add("char");
fieldTypeList.Add("int4");
fieldTypeList.Add("int8");
fieldTypeList.Add("numeric");
fieldTypeList.Add("timestamptz");
fieldTypeList.Add("bit");
fieldTypeList.Add("text");
fieldTypeList.Add("jsonb");
}
return SUCCESS(fieldTypeList);
}
}
}