mirror of
https://github.com/simtactics/mysimulation.git
synced 2025-07-06 14:40:28 -04:00
Removed NioTSO client and server
- NioTSO client isn't needed because we're using RayLib - Added FreeSO's API server to handle most backend operations
This commit is contained in:
parent
f12ba1502b
commit
22191ce648
591 changed files with 53264 additions and 3362 deletions
321
server/FSO.Server.Api.Core/Controllers/AvatarInfoController.cs
Executable file
321
server/FSO.Server.Api.Core/Controllers/AvatarInfoController.cs
Executable file
|
@ -0,0 +1,321 @@
|
|||
using FSO.Server.Api.Core.Utils;
|
||||
using Microsoft.AspNetCore.Cors;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using FSO.Server.Database.DA.Avatars;
|
||||
|
||||
namespace FSO.Server.Api.Core.Controllers
|
||||
{
|
||||
[EnableCors]
|
||||
[ApiController]
|
||||
public class AvatarInfoController : ControllerBase
|
||||
{
|
||||
//get the avatars by user_id
|
||||
[Route("userapi/user/avatars")]
|
||||
public IActionResult GetByUser()
|
||||
{
|
||||
var api = Api.INSTANCE;
|
||||
var user = api.RequireAuthentication(Request);
|
||||
if (!user.Claims.Contains("userReadPermissions")) return ApiResponse.Json(HttpStatusCode.OK, new JSONAvatarError("No read premissions found."));
|
||||
|
||||
using (var da = api.DAFactory.Get())
|
||||
{
|
||||
var avatars = da.Avatars.GetByUserId(user.UserID);
|
||||
List<JSONAvatar> avatarJson = new List<JSONAvatar>();
|
||||
foreach (var avatar in avatars)
|
||||
{
|
||||
avatarJson.Add(new JSONAvatar
|
||||
{
|
||||
avatar_id = avatar.avatar_id,
|
||||
shard_id = avatar.shard_id,
|
||||
name = avatar.name,
|
||||
gender = avatar.gender,
|
||||
date = avatar.date,
|
||||
description = avatar.description,
|
||||
current_job = avatar.current_job,
|
||||
mayor_nhood = avatar.mayor_nhood
|
||||
});
|
||||
}
|
||||
var avatarsJson = new JSONAvatars();
|
||||
avatarsJson.avatars = avatarJson;
|
||||
return ApiResponse.Json(HttpStatusCode.OK, avatarsJson);
|
||||
}
|
||||
}
|
||||
//get the avatar by id
|
||||
[HttpGet]
|
||||
[Route("userapi/avatars/{avartarId}")]
|
||||
public IActionResult GetByID(uint avartarId)
|
||||
{
|
||||
var api = Api.INSTANCE;
|
||||
|
||||
using (var da = api.DAFactory.Get())
|
||||
{
|
||||
var avatar = da.Avatars.Get(avartarId);
|
||||
if (avatar == null) return ApiResponse.Json(HttpStatusCode.NotFound, new JSONAvatarError("Avatar not found"));
|
||||
|
||||
var avatarJson = new JSONAvatar
|
||||
{
|
||||
avatar_id = avatar.avatar_id,
|
||||
shard_id = avatar.shard_id,
|
||||
name = avatar.name,
|
||||
gender = avatar.gender,
|
||||
date = avatar.date,
|
||||
description = avatar.description,
|
||||
current_job = avatar.current_job,
|
||||
mayor_nhood = avatar.mayor_nhood
|
||||
|
||||
};
|
||||
|
||||
return ApiResponse.Json(HttpStatusCode.OK, avatarJson);
|
||||
}
|
||||
}
|
||||
//get the avatars by ids
|
||||
[Route("userapi/avatars")]
|
||||
public IActionResult GetByIDs([FromQuery(Name = "ids")]string idsString)
|
||||
{
|
||||
var api = Api.INSTANCE;
|
||||
try
|
||||
{
|
||||
uint[] ids = Array.ConvertAll(idsString.Split(","), uint.Parse);
|
||||
using (var da = api.DAFactory.Get())
|
||||
{
|
||||
var avatars = da.Avatars.GetMultiple(ids);
|
||||
List<JSONAvatar> avatarJson = new List<JSONAvatar>();
|
||||
foreach (var avatar in avatars)
|
||||
{
|
||||
avatarJson.Add(new JSONAvatar
|
||||
{
|
||||
avatar_id = avatar.avatar_id,
|
||||
shard_id = avatar.shard_id,
|
||||
name = avatar.name,
|
||||
gender = avatar.gender,
|
||||
date = avatar.date,
|
||||
description = avatar.description,
|
||||
current_job = avatar.current_job,
|
||||
mayor_nhood = avatar.mayor_nhood
|
||||
});
|
||||
}
|
||||
var avatarsJson = new JSONAvatars();
|
||||
avatarsJson.avatars = avatarJson;
|
||||
return ApiResponse.Json(HttpStatusCode.OK, avatarsJson);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
return ApiResponse.Json(HttpStatusCode.NotFound, new JSONAvatarError("Error during cast. (invalid_value)"));
|
||||
}
|
||||
}
|
||||
//gets all the avatars from one city
|
||||
[HttpGet]
|
||||
[Route("userapi/city/{shardId}/avatars/page/{pageNum}")]
|
||||
public IActionResult GetAll(int shardId,int pageNum, [FromQuery(Name = "avatars_on_page")]int perPage)
|
||||
{
|
||||
var api = Api.INSTANCE;
|
||||
if(perPage == 0)
|
||||
{
|
||||
perPage = 100;
|
||||
}
|
||||
if (perPage > 500) return ApiResponse.Json(HttpStatusCode.NotFound, new JSONLotError("The max amount of avatars per page is 500"));
|
||||
using (var da = api.DAFactory.Get())
|
||||
{
|
||||
pageNum = pageNum - 1;
|
||||
|
||||
var avatars = da.Avatars.AllByPage(shardId, pageNum * perPage, perPage,"avatar_id");
|
||||
var avatarCount = avatars.Total;
|
||||
var totalPages = (avatars.Total - 1)/perPage + 1;
|
||||
|
||||
var pageAvatarsJson = new JSONAvatarsPage();
|
||||
pageAvatarsJson.total_avatars = avatarCount;
|
||||
pageAvatarsJson.page = pageNum + 1;
|
||||
pageAvatarsJson.total_pages = (int)totalPages;
|
||||
pageAvatarsJson.avatars_on_page = avatars.Count();
|
||||
|
||||
if (pageNum < 0 || pageNum >= (int)totalPages) return ApiResponse.Json(HttpStatusCode.NotFound, new JSONAvatarError("Page not found"));
|
||||
if (avatars == null) return ApiResponse.Json(HttpStatusCode.NotFound, new JSONAvatarError("Avatar not found"));
|
||||
|
||||
List<JSONAvatar> avatarJson = new List<JSONAvatar>();
|
||||
foreach (var avatar in avatars)
|
||||
{
|
||||
avatarJson.Add(new JSONAvatar
|
||||
{
|
||||
avatar_id = avatar.avatar_id,
|
||||
shard_id = avatar.shard_id,
|
||||
name = avatar.name,
|
||||
gender = avatar.gender,
|
||||
date = avatar.date,
|
||||
description = avatar.description,
|
||||
current_job = avatar.current_job,
|
||||
mayor_nhood = avatar.mayor_nhood
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
pageAvatarsJson.avatars = avatarJson;
|
||||
return ApiResponse.Json(HttpStatusCode.OK, pageAvatarsJson);
|
||||
}
|
||||
}
|
||||
//gets avatar by name
|
||||
[HttpGet]
|
||||
[Route("userapi/city/{shardId}/avatars/name/{name}")]
|
||||
public IActionResult GetByName(int shardId, string name)
|
||||
{
|
||||
var api = Api.INSTANCE;
|
||||
|
||||
using (var da = api.DAFactory.Get())
|
||||
{
|
||||
var avatar = da.Avatars.SearchExact(shardId, name, 1).FirstOrDefault();
|
||||
if (avatar == null) return ApiResponse.Json(HttpStatusCode.NotFound, new JSONAvatarError("Avatar not found"));
|
||||
|
||||
var avatarJson = new JSONAvatar();
|
||||
var avatarById = da.Avatars.Get(avatar.avatar_id);
|
||||
if (avatarById == null) return ApiResponse.Json(HttpStatusCode.NotFound, new JSONAvatarError("Avatar not found"));
|
||||
avatarJson = (new JSONAvatar
|
||||
{
|
||||
avatar_id = avatarById.avatar_id,
|
||||
shard_id = avatarById.shard_id,
|
||||
name = avatarById.name,
|
||||
gender = avatarById.gender,
|
||||
date = avatarById.date,
|
||||
description = avatarById.description,
|
||||
current_job = avatarById.current_job,
|
||||
mayor_nhood = avatarById.mayor_nhood
|
||||
});
|
||||
return ApiResponse.Json(HttpStatusCode.OK, avatarJson);
|
||||
}
|
||||
}
|
||||
//gets all the avatars that live in a specific neighbourhood
|
||||
[HttpGet]
|
||||
[Route("userapi/city/{shardId}/avatars/neighborhood/{nhoodId}")]
|
||||
public IActionResult GetByNhood(int shardId, uint nhoodId)
|
||||
{
|
||||
var api = Api.INSTANCE;
|
||||
|
||||
using (var da = api.DAFactory.Get())
|
||||
{
|
||||
var lots = da.Lots.All(shardId).Where(x => x.neighborhood_id == nhoodId);
|
||||
if (lots == null) return ApiResponse.Json(HttpStatusCode.NotFound, new JSONAvatarError("Lots not found"));
|
||||
|
||||
List<JSONAvatar> avatarJson = new List<JSONAvatar>();
|
||||
foreach (var lot in lots)
|
||||
{
|
||||
if(lot.category != FSO.Common.Enum.LotCategory.community)
|
||||
{
|
||||
var roomies = da.Roommates.GetLotRoommates(lot.lot_id).Where(x => x.is_pending == 0).Select(x => x.avatar_id);
|
||||
var avatars = da.Avatars.GetMultiple(roomies.ToArray());
|
||||
foreach (var avatar in avatars)
|
||||
{
|
||||
avatarJson.Add(new JSONAvatar
|
||||
{
|
||||
avatar_id = avatar.avatar_id,
|
||||
shard_id = avatar.shard_id,
|
||||
name = avatar.name,
|
||||
gender = avatar.gender,
|
||||
date = avatar.date,
|
||||
description = avatar.description,
|
||||
current_job = avatar.current_job,
|
||||
mayor_nhood = avatar.mayor_nhood
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
var avatarsJson = new JSONAvatars();
|
||||
avatarsJson.avatars = avatarJson;
|
||||
return ApiResponse.Json(HttpStatusCode.OK, avatarsJson);
|
||||
}
|
||||
}
|
||||
//get all online Avatars
|
||||
[HttpGet]
|
||||
[Route("userapi/avatars/online")]
|
||||
public IActionResult GetOnline([FromQuery(Name = "compact")]bool compact)
|
||||
{
|
||||
var api = Api.INSTANCE;
|
||||
|
||||
using (var da = api.DAFactory.Get())
|
||||
{
|
||||
List<JSONAvatarSmall> avatarSmallJson = new List<JSONAvatarSmall>();
|
||||
var avatarJson = new JSONAvatarOnline();
|
||||
if (compact)
|
||||
{
|
||||
var avatarStatus = da.AvatarClaims.GetAllActiveAvatarsCount();
|
||||
if (avatarStatus == null) return ApiResponse.Json(HttpStatusCode.NotFound, new JSONAvatarError("ammount not found"));
|
||||
avatarJson.avatars_online_count = avatarStatus;
|
||||
}
|
||||
|
||||
|
||||
if (!compact)
|
||||
{
|
||||
var avatarStatus = da.AvatarClaims.GetAllActiveAvatars();
|
||||
if (avatarStatus == null) return ApiResponse.Json(HttpStatusCode.NotFound, new JSONAvatarError("Avatars not found"));
|
||||
|
||||
foreach (var avatar in avatarStatus)
|
||||
{
|
||||
uint location = 0;
|
||||
if (avatar.privacy_mode == 0)
|
||||
{
|
||||
location = avatar.location;
|
||||
}
|
||||
avatarSmallJson.Add(new JSONAvatarSmall
|
||||
{
|
||||
avatar_id = avatar.avatar_id,
|
||||
name = avatar.name,
|
||||
privacy_mode = avatar.privacy_mode,
|
||||
location = location
|
||||
});
|
||||
|
||||
}
|
||||
avatarJson.avatars_online_count = avatarStatus.Count();
|
||||
}
|
||||
|
||||
avatarJson.avatars = avatarSmallJson;
|
||||
return ApiResponse.Json(HttpStatusCode.OK, avatarJson);
|
||||
}
|
||||
}
|
||||
}
|
||||
public class JSONAvatarError
|
||||
{
|
||||
public string error;
|
||||
public JSONAvatarError(string errorString)
|
||||
{
|
||||
error = errorString;
|
||||
}
|
||||
}
|
||||
public class JSONAvatarsPage
|
||||
{
|
||||
public int page { get; set; }
|
||||
public int total_pages { get; set; }
|
||||
public int total_avatars { get; set; }
|
||||
public int avatars_on_page { get; set; }
|
||||
public List<JSONAvatar> avatars { get; set; }
|
||||
}
|
||||
public class JSONAvatarOnline
|
||||
{
|
||||
public int? avatars_online_count { get; set; }
|
||||
public List<JSONAvatarSmall> avatars { get; set; }
|
||||
}
|
||||
public class JSONAvatarSmall
|
||||
{
|
||||
public uint avatar_id { get; set; }
|
||||
public string name { get; set; }
|
||||
public byte privacy_mode { get; set; }
|
||||
public uint location { get; set; }
|
||||
}
|
||||
public class JSONAvatars
|
||||
{
|
||||
public List<JSONAvatar> avatars { get; set; }
|
||||
}
|
||||
public class JSONAvatar
|
||||
{
|
||||
public uint avatar_id { get; set; }
|
||||
public int shard_id { get; set; }
|
||||
public string name { get; set; }
|
||||
public DbAvatarGender gender { get; set; }
|
||||
public uint date { get; set; }
|
||||
public string description { get; set; }
|
||||
public ushort current_job { get; set; }
|
||||
public int? mayor_nhood { get; set; }
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue