mirror of
https://github.com/LBPUnion/ProjectLighthouse.git
synced 2025-07-28 07:58:40 +00:00
Store location in seperate table
This commit is contained in:
parent
e95f3a0439
commit
b2428b6ba8
6 changed files with 62 additions and 15 deletions
17
DatabaseMigrations/1.sql
Normal file
17
DatabaseMigrations/1.sql
Normal file
|
@ -0,0 +1,17 @@
|
|||
create table ProfileCardLocations
|
||||
(
|
||||
UserId int not null,
|
||||
LocationX int not null,
|
||||
LocationY int not null
|
||||
);
|
||||
|
||||
create unique index ProfileCardLocations_UserId_uindex
|
||||
on Locations (Id);
|
||||
|
||||
alter table Locations
|
||||
add constraint ProfileCardLocations_pk
|
||||
primary key (Id);
|
||||
|
||||
alter table Users
|
||||
add LocationId int null;
|
||||
|
|
@ -13,7 +13,7 @@ namespace ProjectLighthouse.Controllers {
|
|||
public async Task<IActionResult> Eula() {
|
||||
User user = await new Database().Users.FirstOrDefaultAsync(u => u.Username == "jvyden");
|
||||
|
||||
return Ok($"You are logged in as user {user.Username} (id {user.UserId})\n{user.Serialize()}");
|
||||
return Ok($"You are logged in as user {user.Username} (id {user.UserId})");
|
||||
}
|
||||
|
||||
[HttpGet("announce")]
|
||||
|
|
|
@ -13,12 +13,20 @@ namespace ProjectLighthouse.Controllers {
|
|||
public class UserController : ControllerBase {
|
||||
[HttpGet("user/{username}")]
|
||||
public async Task<IActionResult> GetUser(string username) {
|
||||
User user = await new Database().Users.FirstOrDefaultAsync(u => u.Username == username);
|
||||
await using Database database = new();
|
||||
|
||||
User user = await database.Users.FirstOrDefaultAsync(u => u.Username == username);
|
||||
|
||||
if(user == null) return this.NotFound();
|
||||
return this.Ok(user.Serialize());
|
||||
}
|
||||
|
||||
[HttpPost("user/{username}")]
|
||||
public async Task<IActionResult> CreateUser(string username) {
|
||||
await new Database().CreateUser(username);
|
||||
return await GetUser(username);
|
||||
}
|
||||
|
||||
[HttpPost("updateUser")]
|
||||
public async Task<IActionResult> UpdateUser() {
|
||||
await using Database database = new();
|
||||
|
@ -52,7 +60,7 @@ namespace ProjectLighthouse.Controllers {
|
|||
}
|
||||
}
|
||||
|
||||
await database.SaveChangesAsync();
|
||||
if(database.ChangeTracker.HasChanges()) await database.SaveChangesAsync();
|
||||
return this.Ok();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,10 +12,26 @@ namespace ProjectLighthouse {
|
|||
|
||||
public async Task CreateUser(string username) {
|
||||
await this.Database.ExecuteSqlRawAsync(
|
||||
"INSERT INTO Users (Username, Biography) VALUES ({0}, {1})",
|
||||
username, "");
|
||||
"INSERT INTO Locations (X, Y) VALUES ({0}, {1})",
|
||||
0, 0);
|
||||
|
||||
Location l = new() {
|
||||
X = 0,
|
||||
Y = 0
|
||||
};
|
||||
|
||||
this.Locations.Add(l);
|
||||
await this.SaveChangesAsync();
|
||||
|
||||
int locationId = l.Id;
|
||||
|
||||
await this.Database.ExecuteSqlRawAsync(
|
||||
"INSERT INTO Users (Username, Biography, Pins, LocationId) VALUES ({0}, {1}, {2}, {3})",
|
||||
username, "No biography provided.", "", locationId);
|
||||
|
||||
}
|
||||
|
||||
public DbSet<User> Users { get; set; }
|
||||
public DbSet<Location> Locations { get; set; }
|
||||
}
|
||||
}
|
|
@ -5,12 +5,13 @@ namespace ProjectLighthouse.Types {
|
|||
/// The location of a slot on a planet.
|
||||
/// </summary>
|
||||
public class Location {
|
||||
public int X;
|
||||
public int Y;
|
||||
public int Id { get; set; }
|
||||
public int X { get; set; }
|
||||
public int Y { get; set; }
|
||||
|
||||
public string Serialize() {
|
||||
return LbpSerializer.StringElement("x", this.X) +
|
||||
LbpSerializer.StringElement("x", this.Y);
|
||||
LbpSerializer.StringElement("y", this.Y);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,4 +1,5 @@
|
|||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Linq;
|
||||
using ProjectLighthouse.Serialization;
|
||||
|
||||
namespace ProjectLighthouse.Types {
|
||||
|
@ -21,16 +22,20 @@ namespace ProjectLighthouse.Types {
|
|||
public int PhotosByMeCount { get; set; }
|
||||
public int PhotosWithMeCount { get; set; }
|
||||
public bool CommentsEnabled { get; set; }
|
||||
|
||||
|
||||
public int LocationId { get; set; }
|
||||
|
||||
private Location location;
|
||||
/// <summary>
|
||||
/// The location of the profile card on the user's earth
|
||||
/// </summary>
|
||||
// [NotMapped]
|
||||
public Location Location = new() {
|
||||
X = 0,
|
||||
Y = 0
|
||||
};
|
||||
|
||||
public Location Location {
|
||||
get {
|
||||
if(location != null) return this.location;
|
||||
return location = new Database().Locations.First(l => l.Id == LocationId);
|
||||
}
|
||||
}
|
||||
|
||||
public int FavouriteSlotCount { get; set; }
|
||||
public int FavouriteUserCount { get; set; }
|
||||
public int lolcatftwCount { get; set; }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue