Rename GroupRoles to GroupMemberships and...

...made displayname check in GetMembersByGroupID.
This commit is contained in:
Hipposgrumm 2025-10-26 22:21:43 -06:00
parent 6963a22f6f
commit 5e5a66bf92
4 changed files with 20 additions and 20 deletions

View File

@ -109,7 +109,7 @@ public class GroupController : Controller {
public IActionResult CreateGroup(Viking viking, [FromForm] string apiKey, [FromForm] string groupCreateRequest) { public IActionResult CreateGroup(Viking viking, [FromForm] string apiKey, [FromForm] string groupCreateRequest) {
uint gameId = ClientVersion.GetGameID(apiKey); uint gameId = ClientVersion.GetGameID(apiKey);
if (viking.GroupRoles.Any(g => g.Group.GameID == gameId)) { if (viking.GroupMemberships.Any(g => g.Group.GameID == gameId)) {
return Ok(new CreateGroupResult { Success = false, Status = CreateGroupStatus.CreatorIsNotApproved }); return Ok(new CreateGroupResult { Success = false, Status = CreateGroupStatus.CreatorIsNotApproved });
} }
@ -121,7 +121,7 @@ public class GroupController : Controller {
//if (request.MaxMemberLimit < 4) return Ok(new CreateGroupResult { Success = false, Status = CreateGroupStatus.GroupMaxMemberLimitInvalid }); // Not actually used by the game. //if (request.MaxMemberLimit < 4) return Ok(new CreateGroupResult { Success = false, Status = CreateGroupStatus.GroupMaxMemberLimitInvalid }); // Not actually used by the game.
if (request.Name.Length == 0) return Ok(new CreateGroupResult { Success = false, Status = CreateGroupStatus.GroupNameIsEmpty }); if (request.Name.Length == 0) return Ok(new CreateGroupResult { Success = false, Status = CreateGroupStatus.GroupNameIsEmpty });
if (request.Description.Length == 0) return Ok(new CreateGroupResult { Success = false, Status = CreateGroupStatus.GroupDescriptionIsEmpty }); if (request.Description.Length == 0) return Ok(new CreateGroupResult { Success = false, Status = CreateGroupStatus.GroupDescriptionIsEmpty });
if (viking.GroupRoles.Any(g => g.Group.Name.Equals(request.Name, StringComparison.InvariantCultureIgnoreCase))) return Ok(new CreateGroupResult { Success = false, Status = CreateGroupStatus.GroupNameIsDuplicate }); if (viking.GroupMemberships.Any(g => g.Group.Name.Equals(request.Name, StringComparison.InvariantCultureIgnoreCase))) return Ok(new CreateGroupResult { Success = false, Status = CreateGroupStatus.GroupNameIsDuplicate });
Model.Group group = new Model.Group { Model.Group group = new Model.Group {
Name = request.Name, Name = request.Name,
@ -173,7 +173,7 @@ public class GroupController : Controller {
EditGroupRequest request = XmlUtil.DeserializeXml<EditGroupRequest>(groupEditRequest); EditGroupRequest request = XmlUtil.DeserializeXml<EditGroupRequest>(groupEditRequest);
request.Name = request.Name.Trim(); request.Name = request.Name.Trim();
GroupMember? vikingRole = viking.GroupRoles.FirstOrDefault(gv => gv.Group.GroupID.ToString() == request.GroupID); GroupMember? vikingRole = viking.GroupMemberships.FirstOrDefault(gv => gv.Group.GroupID.ToString() == request.GroupID);
if (vikingRole == null) { if (vikingRole == null) {
return Ok(new EditGroupResult { Success = false, Status = EditGroupStatus.GroupNotFound }); return Ok(new EditGroupResult { Success = false, Status = EditGroupStatus.GroupNotFound });
} else if (vikingRole.UserRole < UserRole.Elder) { } else if (vikingRole.UserRole < UserRole.Elder) {
@ -185,7 +185,7 @@ public class GroupController : Controller {
//if (request.MaxMemberLimit < 4) return Ok(new EditGroupResult { Success = false, Status = EditGroupStatus.GroupMaxMemberLimitInvalid }); // Not actually used by the game. //if (request.MaxMemberLimit < 4) return Ok(new EditGroupResult { Success = false, Status = EditGroupStatus.GroupMaxMemberLimitInvalid }); // Not actually used by the game.
if ((request.Name?.Length ?? 0) == 0) request.Name = vikingRole.Group.Name; if ((request.Name?.Length ?? 0) == 0) request.Name = vikingRole.Group.Name;
if ((request.Description?.Length ?? 0) == 0) request.Description = vikingRole.Group.Description; if ((request.Description?.Length ?? 0) == 0) request.Description = vikingRole.Group.Description;
if (request.Name != vikingRole.Group.Name && viking.GroupRoles.Any(gm => gm.Group.Name.Equals(request.Name, StringComparison.InvariantCultureIgnoreCase))) return Ok(new EditGroupResult { Success = false, Status = EditGroupStatus.GroupNameIsDuplicate }); if (request.Name != vikingRole.Group.Name && viking.GroupMemberships.Any(gm => gm.Group.Name.Equals(request.Name, StringComparison.InvariantCultureIgnoreCase))) return Ok(new EditGroupResult { Success = false, Status = EditGroupStatus.GroupNameIsDuplicate });
vikingRole.Group.Name = request.Name; vikingRole.Group.Name = request.Name;
vikingRole.Group.Description = request.Description; vikingRole.Group.Description = request.Description;
@ -209,7 +209,7 @@ public class GroupController : Controller {
uint gameId = ClientVersion.GetGameID(apiKey); uint gameId = ClientVersion.GetGameID(apiKey);
// Check for loyalty. // Check for loyalty.
if (viking.GroupRoles.Any(g => g.Group.GameID == gameId)) { if (viking.GroupMemberships.Any(g => g.Group.GameID == gameId)) {
return Ok(new JoinGroupResult { GroupStatus = GroupMembershipStatus.SELF_BLOCKED }); return Ok(new JoinGroupResult { GroupStatus = GroupMembershipStatus.SELF_BLOCKED });
} }
Model.Group? group = ctx.Groups.FirstOrDefault(g => g.GroupID.ToString().Equals(groupID, StringComparison.OrdinalIgnoreCase)); Model.Group? group = ctx.Groups.FirstOrDefault(g => g.GroupID.ToString().Equals(groupID, StringComparison.OrdinalIgnoreCase));
@ -242,7 +242,7 @@ public class GroupController : Controller {
return Ok(new GroupJoinResult { Success = false, Status = JoinGroupStatus.GroupTypeIsNotPublic }); return Ok(new GroupJoinResult { Success = false, Status = JoinGroupStatus.GroupTypeIsNotPublic });
} }
GroupMember? existing = viking.GroupRoles.FirstOrDefault(g => g.Group.GameID == gameId); GroupMember? existing = viking.GroupMemberships.FirstOrDefault(g => g.Group.GameID == gameId);
if (existing != null) { if (existing != null) {
if (existing.Group == group) if (existing.Group == group)
return Ok(new GroupJoinResult { Success = false, Status = JoinGroupStatus.UserAlreadyMemberOfTheGroup }); return Ok(new GroupJoinResult { Success = false, Status = JoinGroupStatus.UserAlreadyMemberOfTheGroup });
@ -283,7 +283,7 @@ public class GroupController : Controller {
[VikingSession] [VikingSession]
public IActionResult LeaveGroup(Viking viking, [FromForm] string groupLeaveRequest) { public IActionResult LeaveGroup(Viking viking, [FromForm] string groupLeaveRequest) {
LeaveGroupRequest request = XmlUtil.DeserializeXml<LeaveGroupRequest>(groupLeaveRequest); LeaveGroupRequest request = XmlUtil.DeserializeXml<LeaveGroupRequest>(groupLeaveRequest);
GroupMember? vikingRole = viking.GroupRoles.FirstOrDefault(g => g.Group.GroupID.ToString() == request.GroupID); GroupMember? vikingRole = viking.GroupMemberships.FirstOrDefault(g => g.Group.GroupID.ToString() == request.GroupID);
if (vikingRole == null) return Ok(new LeaveGroupResult { Success = false, Status = LeaveGroupStatus.Error }); if (vikingRole == null) return Ok(new LeaveGroupResult { Success = false, Status = LeaveGroupStatus.Error });
GroupMember? targetRole; GroupMember? targetRole;
if (viking.Uid.ToString().Equals(request.UserID, StringComparison.CurrentCultureIgnoreCase)) { if (viking.Uid.ToString().Equals(request.UserID, StringComparison.CurrentCultureIgnoreCase)) {
@ -311,7 +311,7 @@ public class GroupController : Controller {
if (request.ForUserID != null) { if (request.ForUserID != null) {
Viking? target = ctx.Vikings.FirstOrDefault(v => request.ForUserID.ToUpper() == v.Uid.ToString()); Viking? target = ctx.Vikings.FirstOrDefault(v => request.ForUserID.ToUpper() == v.Uid.ToString());
if (target == null) return Ok(new GetGroupsResult { Success = false }); if (target == null) return Ok(new GetGroupsResult { Success = false });
groups = target.GroupRoles.Select(gv => gv.Group); groups = target.GroupMemberships.Select(gv => gv.Group);
} else { } else {
groups = groups.Where(g => g.Type == GroupType.Public || g.Type == GroupType.MembersOnly); groups = groups.Where(g => g.Type == GroupType.Public || g.Type == GroupType.MembersOnly);
} }
@ -353,7 +353,7 @@ public class GroupController : Controller {
[VikingSession] [VikingSession]
public IActionResult RemoveMember(Viking viking, [FromForm] string removeMemberRequest) { public IActionResult RemoveMember(Viking viking, [FromForm] string removeMemberRequest) {
RemoveMemberRequest request = XmlUtil.DeserializeXml<RemoveMemberRequest>(removeMemberRequest); RemoveMemberRequest request = XmlUtil.DeserializeXml<RemoveMemberRequest>(removeMemberRequest);
GroupMember? vikingRole = viking.GroupRoles.FirstOrDefault(g => g.Group.GroupID.ToString() == request.GroupID); GroupMember? vikingRole = viking.GroupMemberships.FirstOrDefault(g => g.Group.GroupID.ToString() == request.GroupID);
if (vikingRole == null) if (vikingRole == null)
return Ok(new RemoveMemberResult { Success = false, Status = RemoveMemberStatus.Error }); return Ok(new RemoveMemberResult { Success = false, Status = RemoveMemberStatus.Error });
@ -378,7 +378,7 @@ public class GroupController : Controller {
uint gameId = ClientVersion.GetGameID(apiKey); uint gameId = ClientVersion.GetGameID(apiKey);
AuthorizeJoinRequest request = XmlUtil.DeserializeXml<AuthorizeJoinRequest>(authorizeJoinRequest); AuthorizeJoinRequest request = XmlUtil.DeserializeXml<AuthorizeJoinRequest>(authorizeJoinRequest);
GroupMember? vikingRole = viking.GroupRoles.FirstOrDefault(g => g.Group.GroupID.ToString() == request.GroupID); GroupMember? vikingRole = viking.GroupMemberships.FirstOrDefault(g => g.Group.GroupID.ToString() == request.GroupID);
if (vikingRole == null) if (vikingRole == null)
return Ok(new AuthorizeJoinResult { Success = false, Status = AuthorizeJoinStatus.ApproverNotInThisGroup }); return Ok(new AuthorizeJoinResult { Success = false, Status = AuthorizeJoinStatus.ApproverNotInThisGroup });
@ -390,7 +390,7 @@ public class GroupController : Controller {
return Ok(new AuthorizeJoinResult { Success = false, Status = AuthorizeJoinStatus.Error }); return Ok(new AuthorizeJoinResult { Success = false, Status = AuthorizeJoinStatus.Error });
} }
GroupMember? existing = target.GroupRoles.FirstOrDefault(gm => gm.Group.GameID == gameId); GroupMember? existing = target.GroupMemberships.FirstOrDefault(gm => gm.Group.GameID == gameId);
if (existing != null) { if (existing != null) {
return Ok(new AuthorizeJoinResult { return Ok(new AuthorizeJoinResult {
Success = false, Success = false,
@ -427,7 +427,7 @@ public class GroupController : Controller {
[VikingSession] [VikingSession]
public IActionResult AssignRole(Viking viking, [FromForm] string assignRoleRequest) { public IActionResult AssignRole(Viking viking, [FromForm] string assignRoleRequest) {
AssignRoleRequest request = XmlUtil.DeserializeXml<AssignRoleRequest>(assignRoleRequest); AssignRoleRequest request = XmlUtil.DeserializeXml<AssignRoleRequest>(assignRoleRequest);
GroupMember? vikingRole = viking.GroupRoles.FirstOrDefault(g => g.Group.GroupID.ToString() == request.GroupID); GroupMember? vikingRole = viking.GroupMemberships.FirstOrDefault(g => g.Group.GroupID.ToString() == request.GroupID);
if (vikingRole == null) if (vikingRole == null)
return Ok(new AssignRoleResult { Success = false, Status = AssignRoleStatus.ApproverNotMemberOfTheGroup }); return Ok(new AssignRoleResult { Success = false, Status = AssignRoleStatus.ApproverNotMemberOfTheGroup });
@ -465,7 +465,7 @@ public class GroupController : Controller {
[VikingSession] [VikingSession]
public IActionResult GetPendingJoinRequests(Viking viking, [FromForm] string getPendingJoinRequest) { public IActionResult GetPendingJoinRequests(Viking viking, [FromForm] string getPendingJoinRequest) {
GetPendingJoinRequest request = XmlUtil.DeserializeXml<GetPendingJoinRequest>(getPendingJoinRequest); GetPendingJoinRequest request = XmlUtil.DeserializeXml<GetPendingJoinRequest>(getPendingJoinRequest);
GroupMember? vikingRole = viking.GroupRoles.FirstOrDefault(g => g.Group.GroupID.ToString() == request.GroupID); GroupMember? vikingRole = viking.GroupMemberships.FirstOrDefault(g => g.Group.GroupID.ToString() == request.GroupID);
if (vikingRole?.UserRole >= UserRole.Elder) { if (vikingRole?.UserRole >= UserRole.Elder) {
return Ok(new GetPendingJoinResult { return Ok(new GetPendingJoinResult {
Success = true, Success = true,
@ -494,7 +494,7 @@ public class GroupController : Controller {
Viking? viking = ctx.Vikings.FirstOrDefault(v => v.Uid.ToString() == userId); Viking? viking = ctx.Vikings.FirstOrDefault(v => v.Uid.ToString() == userId);
if (viking == null) return []; if (viking == null) return [];
return viking.GroupRoles.Where(gm => gm.Group.GameID == gameId).Select(gm => new Schema.Group { return viking.GroupMemberships.Where(gm => gm.Group.GameID == gameId).Select(gm => new Schema.Group {
GroupID = gm.Group.GroupID.ToString(), GroupID = gm.Group.GroupID.ToString(),
Name = gm.Group.Name, Name = gm.Group.Name,
Color = gm.Group.Color, Color = gm.Group.Color,
@ -534,7 +534,7 @@ public class GroupController : Controller {
if (group == null) return []; if (group == null) return [];
return group.Vikings.Select(v => new Schema.GroupMember { return group.Vikings.Select(v => new Schema.GroupMember {
DisplayName = v.Viking.AvatarSerialized != null DisplayName = group.GameID == ClientVersion.MB && v.Viking.AvatarSerialized != null
? XmlUtil.DeserializeXml<AvatarData>(v.Viking.AvatarSerialized).DisplayName ? XmlUtil.DeserializeXml<AvatarData>(v.Viking.AvatarSerialized).DisplayName
: v.Viking.Name, : v.Viking.Name,
UserID = v.Viking.Uid.ToString(), UserID = v.Viking.Uid.ToString(),

View File

@ -153,7 +153,7 @@ public class ProfileController : Controller {
UserGameCurrency currency = achievementService.GetUserCurrency(viking); UserGameCurrency currency = achievementService.GetUserCurrency(viking);
ICollection<GroupMember> groups = viking.GroupRoles; ICollection<GroupMember> groups = viking.GroupMemberships;
UserProfileGroupData[] groupData = new UserProfileGroupData[groups.Count]; UserProfileGroupData[] groupData = new UserProfileGroupData[groups.Count];
int i = 0; int i = 0;

View File

@ -153,7 +153,7 @@ public class DBContext : DbContext {
builder.Entity<Viking>().HasOne(v => v.Neighborhood) builder.Entity<Viking>().HasOne(v => v.Neighborhood)
.WithOne(e => e.Viking); .WithOne(e => e.Viking);
builder.Entity<Viking>().HasMany(v => v.GroupRoles) builder.Entity<Viking>().HasMany(v => v.GroupMemberships)
.WithOne(g => g.Viking); .WithOne(g => g.Viking);
builder.Entity<Viking>().HasMany(v => v.Ratings) builder.Entity<Viking>().HasMany(v => v.Ratings)
@ -292,7 +292,7 @@ public class DBContext : DbContext {
builder.Entity<GroupMember>().HasOne(r => r.Group) builder.Entity<GroupMember>().HasOne(r => r.Group)
.WithMany(g => g.Vikings); .WithMany(g => g.Vikings);
builder.Entity<GroupMember>().HasOne(r => r.Viking) builder.Entity<GroupMember>().HasOne(r => r.Viking)
.WithMany(g => g.GroupRoles); .WithMany(g => g.GroupMemberships);
builder.Entity<Group>().HasMany(r => r.JoinRequests) builder.Entity<Group>().HasMany(r => r.JoinRequests)
.WithOne(r => r.Group); .WithOne(r => r.Group);
builder.Entity<GroupJoinRequest>().HasOne(r => r.Group) builder.Entity<GroupJoinRequest>().HasOne(r => r.Group)

View File

@ -47,7 +47,7 @@ public class Viking {
public virtual ICollection<MMORole> MMORoles { get; set; } = null!; public virtual ICollection<MMORole> MMORoles { get; set; } = null!;
public virtual Neighborhood? Neighborhood { get; set; } = null!; public virtual Neighborhood? Neighborhood { get; set; } = null!;
[JsonIgnore] [JsonIgnore]
public virtual ICollection<GroupMember> GroupRoles { get; set; } = null!; public virtual ICollection<GroupMember> GroupMemberships { get; set; } = null!;
public virtual ICollection<Rating> Ratings { get; set; } = null!; public virtual ICollection<Rating> Ratings { get; set; } = null!;
public virtual Dragon? SelectedDragon { get; set; } public virtual Dragon? SelectedDragon { get; set; }
public virtual ICollection<UserMissionData> UserMissions { get; set; } = null!; public virtual ICollection<UserMissionData> UserMissions { get; set; } = null!;