143 lines
5.0 KiB
C#
143 lines
5.0 KiB
C#
using System.Data;
|
|
|
|
namespace brecal.model
|
|
{
|
|
public class User : DbEntity
|
|
{
|
|
#region Properties
|
|
|
|
public string? Firstname { get; set; }
|
|
|
|
public string? Lastname { get; set; }
|
|
|
|
public string Username { get; set; } = "";
|
|
|
|
public string? PasswordHash { get; set; }
|
|
|
|
public string? APIKey { get; set; }
|
|
|
|
public uint? Participant_Id { get; set; }
|
|
|
|
#endregion
|
|
|
|
#region public static methods
|
|
|
|
public static async Task<List<User>> LoadForParticipant(Participant? p, IDBManager manager)
|
|
{
|
|
List<DbEntity> loadResultList = await manager.Load(SetLoadQuery, LoadElems, args: p);
|
|
List<User> result = new();
|
|
foreach (User u in loadResultList.Cast<User>())
|
|
result.Add(u);
|
|
return result;
|
|
}
|
|
|
|
public static void SetLoadQuery(IDbCommand cmd, params object?[] args)
|
|
{
|
|
cmd.CommandText = "SELECT id, first_name, last_name, user_name, api_key, created, modified FROM user WHERE participant_id = @PID";
|
|
if (args.Length != 1 || !(args[0] is Participant))
|
|
throw new ArgumentException("loader needs single partipant as argument");
|
|
IDataParameter pid = cmd.CreateParameter();
|
|
pid.ParameterName = "PID";
|
|
if (args[0] is Participant p)
|
|
pid.Value = p.Id;
|
|
cmd.Parameters.Add(pid);
|
|
}
|
|
|
|
public static List<DbEntity> LoadElems(IDataReader reader)
|
|
{
|
|
List<DbEntity> result = new List<DbEntity>();
|
|
while (reader.Read())
|
|
{
|
|
User u = new();
|
|
u.Id = (uint)reader.GetInt32(0);
|
|
if (!reader.IsDBNull(1)) u.Firstname = reader.GetString(1);
|
|
if (!reader.IsDBNull(2)) u.Lastname = reader.GetString(2);
|
|
if (!reader.IsDBNull(3)) u.Username = reader.GetString(3);
|
|
if (!reader.IsDBNull(4)) u.APIKey = reader.GetString(4);
|
|
if (!reader.IsDBNull(5)) u.Created = reader.GetDateTime(5);
|
|
if (!reader.IsDBNull(6)) u.Modified = reader.GetDateTime(6);
|
|
result.Add(u);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region overrides
|
|
|
|
public override void SetUpdate(IDbCommand cmd)
|
|
{
|
|
if(!string.IsNullOrEmpty(this.PasswordHash))
|
|
cmd.CommandText = "UPDATE user SET first_name = @FIRSTNAME, last_name = @LASTNAME, user_name = @USERNAME, password_hash = @PWHASH, api_key = @APIKEY WHERE id = @ID";
|
|
else
|
|
cmd.CommandText = "UPDATE user SET first_name = @FIRSTNAME, last_name = @LASTNAME, user_name = @USERNAME, api_key = @APIKEY WHERE id = @ID";
|
|
this.SetParameters(cmd);
|
|
}
|
|
|
|
public override void SetCreate(IDbCommand cmd)
|
|
{
|
|
cmd.CommandText = "INSERT INTO user (participant_id, first_name, last_name, user_name, password_hash, api_key) VALUES ( @PID, @FIRSTNAME, @LASTNAME, @USERNAME, @PWHASH, @APIKEY)";
|
|
this.SetParameters(cmd);
|
|
}
|
|
|
|
public override void SetDelete(IDbCommand cmd)
|
|
{
|
|
cmd.CommandText = "DELETE FROM user WHERE id = @ID";
|
|
|
|
IDataParameter idParam = cmd.CreateParameter();
|
|
idParam.ParameterName = "ID";
|
|
idParam.Value = this.Id;
|
|
cmd.Parameters.Add(idParam);
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return this.Username ?? $"{base.Id} - {this.GetType().Name}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region private methods
|
|
|
|
private void SetParameters(IDbCommand cmd)
|
|
{
|
|
IDbDataParameter id = cmd.CreateParameter();
|
|
id.ParameterName = "ID";
|
|
id.Value = this.Id;
|
|
cmd.Parameters.Add(id);
|
|
|
|
IDbDataParameter pid = cmd.CreateParameter();
|
|
pid.ParameterName = "PID";
|
|
pid.Value = this.Participant_Id;
|
|
cmd.Parameters.Add(pid);
|
|
|
|
IDbDataParameter firstname = cmd.CreateParameter();
|
|
firstname.ParameterName = "FIRSTNAME";
|
|
firstname.Value = this.Firstname;
|
|
cmd.Parameters.Add(firstname);
|
|
|
|
IDbDataParameter lastname = cmd.CreateParameter();
|
|
lastname.ParameterName = "LASTNAME";
|
|
lastname.Value = this.Lastname;
|
|
cmd.Parameters.Add(lastname);
|
|
|
|
IDbDataParameter username = cmd.CreateParameter();
|
|
username.ParameterName = "USERNAME";
|
|
username.Value = this.Username;
|
|
cmd.Parameters.Add(username);
|
|
|
|
IDbDataParameter pwhash = cmd.CreateParameter();
|
|
pwhash.ParameterName = "PWHASH";
|
|
pwhash.Value = this.PasswordHash;
|
|
cmd.Parameters.Add(pwhash);
|
|
|
|
IDbDataParameter apikey = cmd.CreateParameter();
|
|
apikey.ParameterName = "APIKEY";
|
|
apikey.Value = this.APIKey;
|
|
cmd.Parameters.Add(apikey);
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
} |