only allow reference types on the server side

This commit is contained in:
Pilzinsel64
2025-03-28 11:08:48 +01:00
parent b3e24d7fdc
commit 81c0d51417
5 changed files with 44 additions and 47 deletions

View File

@@ -7,8 +7,8 @@ namespace Pilz.Net.Api.Server;
public abstract class BaseChildItemHandler<TEntity, TParent, TUpdateMsg>(IApiServer server) public abstract class BaseChildItemHandler<TEntity, TParent, TUpdateMsg>(IApiServer server)
: BaseHandler<TEntity, TUpdateMsg>(server) : BaseHandler<TEntity, TUpdateMsg>(server)
where TEntity : IDataObject where TEntity : class, IDataObject
where TParent : IDataObject where TParent : class, IDataObject
where TUpdateMsg : ApiMessage where TUpdateMsg : ApiMessage
{ {
protected virtual bool RegisterGetAll => true; protected virtual bool RegisterGetAll => true;

View File

@@ -2,15 +2,12 @@
using Pilz.Net.Data; using Pilz.Net.Data;
using Pilz.Net.Extensions; using Pilz.Net.Extensions;
using System.Diagnostics; using System.Diagnostics;
using System.Linq.Expressions;
using System.Reflection;
using System.Runtime.CompilerServices;
namespace Pilz.Net.Api.Server; namespace Pilz.Net.Api.Server;
public abstract class BaseHandler<TEntity, TUpdateMsg>(IApiServer server) public abstract class BaseHandler<TEntity, TUpdateMsg>(IApiServer server)
: IApiHandlerInitializer : IApiHandlerInitializer
where TEntity : IDataObject where TEntity : class, IDataObject
where TUpdateMsg : ApiMessage where TUpdateMsg : ApiMessage
{ {
public abstract string Route { get; } public abstract string Route { get; }

View File

@@ -7,7 +7,7 @@ namespace Pilz.Net.Api.Server;
public abstract class BaseItemHandler<TEntity, TUpdateMsg>(IApiServer server) public abstract class BaseItemHandler<TEntity, TUpdateMsg>(IApiServer server)
: BaseHandler<TEntity, TUpdateMsg>(server) : BaseHandler<TEntity, TUpdateMsg>(server)
where TEntity : IDataObject where TEntity : class, IDataObject
where TUpdateMsg : ApiMessage where TUpdateMsg : ApiMessage
{ {
protected virtual bool RegisterGetAll => true; protected virtual bool RegisterGetAll => true;

View File

@@ -4,58 +4,58 @@ namespace Pilz.Net.Data;
public abstract class DataManager : IDataManager public abstract class DataManager : IDataManager
{ {
protected abstract void UpdateEntity<T>(T obj) where T : IDataObject; protected abstract void UpdateEntity<T>(T obj) where T : class, IDataObject;
protected abstract IQueryable<T> GetEntitySet<T>() where T : IDataObject; protected abstract IQueryable<T> GetEntitySet<T>() where T : class, IDataObject;
protected abstract T? FindEntity<T>(int id) where T : IDataObject; protected abstract T? FindEntity<T>(int id) where T : class, IDataObject;
protected abstract void RemoveEntity<T>(T obj) where T : IDataObject; protected abstract void RemoveEntity<T>(T obj) where T : class, IDataObject;
protected abstract void SaveChanges(); protected abstract void SaveChanges();
public virtual IQueryable<T> Get<T>() where T : IDataObject public virtual IQueryable<T> Get<T>() where T : class, IDataObject
{ {
return GetEntitySet<T>(); return GetEntitySet<T>();
} }
public virtual T FindOrNew<T>(int? id) where T : IDataObject public virtual T FindOrNew<T>(int? id) where T : class, IDataObject
{ {
if (Find<T>(id) is not T obj) if (Find<T>(id) is not T obj)
obj = Activator.CreateInstance<T>(); obj = Activator.CreateInstance<T>();
return obj; return obj;
} }
public virtual T FindOrNew<T>(int id) where T : IDataObject public virtual T FindOrNew<T>(int id) where T : class, IDataObject
{ {
if (Find<T>(id) is not T obj) if (Find<T>(id) is not T obj)
obj = Activator.CreateInstance<T>(); obj = Activator.CreateInstance<T>();
return obj; return obj;
} }
public virtual T? FindOrNull<T>(int? id) where T : IDataObject public virtual T? FindOrNull<T>(int? id) where T : class, IDataObject
{ {
if (id == null || id == 0) if (id == null || id == 0)
return default; return default;
return Find<T>(id); return Find<T>(id);
} }
public virtual T? FindOrNull<T>(int id) where T : IDataObject public virtual T? FindOrNull<T>(int id) where T : class, IDataObject
{ {
if (id == 0) if (id == 0)
return default; return default;
return Find<T>(id); return Find<T>(id);
} }
public virtual T? Find<T>(int? id) where T : IDataObject public virtual T? Find<T>(int? id) where T : class, IDataObject
{ {
if (id == null) if (id == null)
return default; return default;
return Find<T>(id.Value); return Find<T>(id.Value);
} }
public virtual T? Find<T>(int id) where T : IDataObject public virtual T? Find<T>(int id) where T : class, IDataObject
{ {
return FindEntity<T>(id); return FindEntity<T>(id);
} }
public virtual bool FindOrNew<T>(int? id, [NotNullWhen(true)] out T? obj) where T : IDataObject public virtual bool FindOrNew<T>(int? id, [NotNullWhen(true)] out T? obj) where T : class, IDataObject
{ {
if (id == null || id == 0) if (id == null || id == 0)
{ {
@@ -65,7 +65,7 @@ public abstract class DataManager : IDataManager
return Find(id.Value, out obj); return Find(id.Value, out obj);
} }
public virtual bool FindOrNew<T>(int id, [NotNullWhen(true)] out T? obj) where T : IDataObject public virtual bool FindOrNew<T>(int id, [NotNullWhen(true)] out T? obj) where T : class, IDataObject
{ {
if (id == 0) if (id == 0)
{ {
@@ -75,7 +75,7 @@ public abstract class DataManager : IDataManager
return Find(id, out obj); return Find(id, out obj);
} }
public virtual bool FindOrNull<T>(int? id, out T? obj) where T : IDataObject public virtual bool FindOrNull<T>(int? id, out T? obj) where T : class, IDataObject
{ {
if (id == null || id == 0) if (id == null || id == 0)
{ {
@@ -85,7 +85,7 @@ public abstract class DataManager : IDataManager
return Find(id.Value, out obj); return Find(id.Value, out obj);
} }
public virtual bool FindOrNull<T>(int id, out T? obj) where T : IDataObject public virtual bool FindOrNull<T>(int id, out T? obj) where T : class, IDataObject
{ {
if (id == 0) if (id == 0)
{ {
@@ -95,7 +95,7 @@ public abstract class DataManager : IDataManager
return Find(id, out obj); return Find(id, out obj);
} }
public virtual bool Find<T>(int id, [NotNullWhen(true)] out T? obj) where T : IDataObject public virtual bool Find<T>(int id, [NotNullWhen(true)] out T? obj) where T : class, IDataObject
{ {
if (FindEntity<T>(id) is not T t) if (FindEntity<T>(id) is not T t)
{ {
@@ -106,23 +106,23 @@ public abstract class DataManager : IDataManager
return true; return true;
} }
public virtual void Delete<T>(int id) where T : IDataObject public virtual void Delete<T>(int id) where T : class, IDataObject
{ {
Delete<T>(id, false); Delete<T>(id, false);
} }
public virtual void Delete<T>(int id, bool save) where T : IDataObject public virtual void Delete<T>(int id, bool save) where T : class, IDataObject
{ {
if (Find(id, out T? obj)) if (Find(id, out T? obj))
Delete(obj, save); Delete(obj, save);
} }
public virtual void Delete<T>(T? obj) where T : IDataObject public virtual void Delete<T>(T? obj) where T : class, IDataObject
{ {
Delete(obj, false); Delete(obj, false);
} }
public virtual void Delete<T>(T? obj, bool save) where T : IDataObject public virtual void Delete<T>(T? obj, bool save) where T : class, IDataObject
{ {
if (obj != null) if (obj != null)
{ {
@@ -131,12 +131,12 @@ public abstract class DataManager : IDataManager
} }
} }
public virtual void Save<T>(T obj) where T : IDataObject public virtual void Save<T>(T obj) where T : class, IDataObject
{ {
Save(obj, false); Save(obj, false);
} }
public virtual void Save<T>(T obj, bool save) where T : IDataObject public virtual void Save<T>(T obj, bool save) where T : class, IDataObject
{ {
UpdateEntity(obj); UpdateEntity(obj);
if (save) Save(); if (save) Save();

View File

@@ -4,23 +4,23 @@ namespace Pilz.Net.Data;
public interface IDataManager public interface IDataManager
{ {
void Delete<T>(int id) where T : IDataObject; void Delete<T>(int id) where T : class, IDataObject;
void Delete<T>(int id, bool save) where T : IDataObject; void Delete<T>(int id, bool save) where T : class, IDataObject;
void Delete<T>(T? obj) where T : IDataObject; void Delete<T>(T? obj) where T : class, IDataObject;
void Delete<T>(T? obj, bool save) where T : IDataObject; void Delete<T>(T? obj, bool save) where T : class, IDataObject;
T? Find<T>(int id) where T : IDataObject; T? Find<T>(int id) where T : class, IDataObject;
bool Find<T>(int id, [NotNullWhen(true)] out T? obj) where T : IDataObject; bool Find<T>(int id, [NotNullWhen(true)] out T? obj) where T : class, IDataObject;
T? Find<T>(int? id) where T : IDataObject; T? Find<T>(int? id) where T : class, IDataObject;
T FindOrNew<T>(int id) where T : IDataObject; T FindOrNew<T>(int id) where T : class, IDataObject;
bool FindOrNew<T>(int id, [NotNullWhen(true)] out T? obj) where T : IDataObject; bool FindOrNew<T>(int id, [NotNullWhen(true)] out T? obj) where T : class, IDataObject;
T FindOrNew<T>(int? id) where T : IDataObject; T FindOrNew<T>(int? id) where T : class, IDataObject;
bool FindOrNew<T>(int? id, [NotNullWhen(true)] out T? obj) where T : IDataObject; bool FindOrNew<T>(int? id, [NotNullWhen(true)] out T? obj) where T : class, IDataObject;
T? FindOrNull<T>(int id) where T : IDataObject; T? FindOrNull<T>(int id) where T : class, IDataObject;
bool FindOrNull<T>(int id, out T? obj) where T : IDataObject; bool FindOrNull<T>(int id, out T? obj) where T : class, IDataObject;
T? FindOrNull<T>(int? id) where T : IDataObject; T? FindOrNull<T>(int? id) where T : class, IDataObject;
bool FindOrNull<T>(int? id, out T? obj) where T : IDataObject; bool FindOrNull<T>(int? id, out T? obj) where T : class, IDataObject;
IQueryable<T> Get<T>() where T : IDataObject; IQueryable<T> Get<T>() where T : class, IDataObject;
void Save(); void Save();
void Save<T>(T obj) where T : IDataObject; void Save<T>(T obj) where T : class, IDataObject;
void Save<T>(T obj, bool save) where T : IDataObject; void Save<T>(T obj, bool save) where T : class, IDataObject;
} }