Files
raven/server/AyaNova/biz/BizObjectNameFetcher.cs
2018-10-03 00:39:36 +00:00

84 lines
2.7 KiB
C#

using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.JsonPatch;
using EnumsNET;
using AyaNova.Util;
using AyaNova.Api.ControllerHelpers;
using AyaNova.Biz;
using AyaNova.Models;
namespace AyaNova.Biz
{
//Turn a type and ID into a displayable name
internal static class BizObjectNameFetcher
{
internal static string Name(AyaTypeId tid, AyContext ct = null)
{
return Name(tid.ObjectType, tid.ObjectId, ct);
}
//Returns existance status of object type and id specified in database
internal static string Name(AyaType aytype, long id, AyContext ct = null)
{
//new up a context??
if (ct == null)
{
ct = ServiceProviderProvider.DBContext;
}
switch (aytype)
{
case AyaType.User:
return ct.User.AsNoTracking().Where(m => m.Id == id).Select(m => m.Name).FirstOrDefault();
case AyaType.Widget:
{
using (var command = ct.Database.GetDbConnection().CreateCommand())
{
command.CommandText = $"SELECT m.name FROM awidget AS m WHERE m.id = {id} LIMIT 1";
ct.Database.OpenConnection();
using (var dr = command.ExecuteReader())
{
// do something with result
return dr.Read() ? dr.GetString(0) : "UNKNOWN";
}
}
// var ret = ct.Widget
// .FromSql($"SELECT m.name FROM awidget AS m WHERE m.id = {id} LIMIT 1")
// .FirstOrDefault();
// return ret.Name;
// return ct.Widget.AsNoTracking().Where(m => m.Id == id).Select(m => m.Name).FirstOrDefault();
}
case AyaType.Tag:
return ct.Tag.AsNoTracking().Where(m => m.Id == id).Select(m => m.Name).FirstOrDefault();
case AyaType.TagGroup:
return ct.TagGroup.AsNoTracking().Where(m => m.Id == id).Select(m => m.Name).FirstOrDefault();
default:
throw new System.NotSupportedException($"AyaNova.BLL.BizObjectNameFetcher::Name type {aytype.ToString()} is not supported");
}
}
/////////////////////////////////////////////////////////////////////
}//eoc
}//eons