using Dapper; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; namespace FSO.Server.Database.DA.Roommates { public class SqlRoommates : AbstractSqlDA, IRoommates { public SqlRoommates(ISqlContext context) : base(context) { } public bool Create(DbRoommate roomie) { try { return (uint)Context.Connection.Execute("INSERT INTO fso_roommates (avatar_id, lot_id, permissions_level, is_pending) " + " VALUES (@avatar_id, @lot_id, @permissions_level, @is_pending);", roomie) > 0; } catch (SqlException) { return false; } } public bool CreateOrUpdate(DbRoommate roomie) { try { return (uint)Context.Connection.Execute("INSERT INTO fso_roommates (avatar_id, lot_id, permissions_level, is_pending) " + "VALUES (@avatar_id, @lot_id, @permissions_level, @is_pending) " + "ON DUPLICATE KEY UPDATE permissions_level = @permissions_level, is_pending = 0", roomie) > 0; } catch (SqlException) { return false; } } public DbRoommate Get(uint avatar_id, int lot_id) { return Context.Connection.Query("SELECT * FROM fso_roommates WHERE avatar_id = @avatar_id AND lot_id = @lot_id", new { avatar_id = avatar_id, lot_id = lot_id }).FirstOrDefault(); } public List GetAvatarsLots(uint avatar_id) { return Context.Connection.Query("SELECT * FROM fso_roommates WHERE avatar_id = @avatar_id", new { avatar_id = avatar_id }).ToList(); } public List GetLotRoommates(int lot_id) { return Context.Connection.Query("SELECT * FROM fso_roommates WHERE lot_id = @lot_id", new { lot_id = lot_id }).ToList(); } public uint RemoveRoommate(uint avatar_id, int lot_id) { return (uint)Context.Connection.Execute("DELETE FROM fso_roommates WHERE avatar_id = @avatar_id AND lot_id = @lot_id", new { avatar_id = avatar_id, lot_id = lot_id }); } public bool DeclineRoommateRequest(uint avatar_id, int lot_id) { return Context.Connection.Execute("DELETE FROM fso_roommates WHERE avatar_id = @avatar_id AND lot_id = @lot_id AND is_pending = 1", new { avatar_id = avatar_id, lot_id = lot_id }) > 0; } public bool AcceptRoommateRequest(uint avatar_id, int lot_id) { return Context.Connection.Execute("UPDATE fso_roommates SET is_pending = 0 WHERE avatar_id = @avatar_id AND lot_id = @lot_id AND is_pending = 1", new { avatar_id = avatar_id, lot_id = lot_id }) > 0; } public bool UpdatePermissionsLevel(uint avatar_id, int lot_id, byte level) { return Context.Connection.Execute("UPDATE fso_roommates SET permissions_level = @level WHERE avatar_id = @avatar_id AND lot_id = @lot_id", new { level = level, avatar_id = avatar_id, lot_id = lot_id }) > 0; } } }