Add more options, prepare for options page
This commit is contained in:
parent
fa16d4d56f
commit
3a0edd3e1e
8
SharedProject/Models/Responses/UserSettingResponse.cs
Normal file
8
SharedProject/Models/Responses/UserSettingResponse.cs
Normal file
@ -0,0 +1,8 @@
|
||||
namespace SharedProject.Models.Responses;
|
||||
|
||||
public class UserSettingResponse
|
||||
{
|
||||
public uint Baid { get; set; }
|
||||
|
||||
|
||||
}
|
@ -19,11 +19,7 @@ public class DashboardController : BaseController<DashboardController>
|
||||
public DashboardResponse GetDashboard()
|
||||
{
|
||||
var cards = context.Cards.AsEnumerable();
|
||||
var users = cards.Select(card => new User
|
||||
{
|
||||
AccessCode = card.AccessCode,
|
||||
Baid = card.Baid
|
||||
}).ToList();
|
||||
var users = cards.Select(card => card.CopyPropertiesToNew<User>()).ToList();
|
||||
return new DashboardResponse
|
||||
{
|
||||
Users = users
|
||||
|
33
TaikoLocalServer/Controllers/Api/UserSettingsController.cs
Normal file
33
TaikoLocalServer/Controllers/Api/UserSettingsController.cs
Normal file
@ -0,0 +1,33 @@
|
||||
using SharedProject.Models.Responses;
|
||||
|
||||
namespace TaikoLocalServer.Controllers.Api;
|
||||
|
||||
[ApiController]
|
||||
[Route("/api/[controller]")]
|
||||
public class UserSettingsController : BaseController<UserSettingsController>
|
||||
{
|
||||
private readonly TaikoDbContext context;
|
||||
|
||||
public UserSettingsController(TaikoDbContext context)
|
||||
{
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
[HttpGet("{baid}")]
|
||||
public async Task<ActionResult<UserSettingResponse>> GetUserSettingResponse(uint baid)
|
||||
{
|
||||
var user = await context.UserData.FirstOrDefaultAsync(datum => datum.Baid == baid);
|
||||
|
||||
if (user is null)
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
var response = new UserSettingResponse
|
||||
{
|
||||
|
||||
};
|
||||
return Ok(response);
|
||||
}
|
||||
|
||||
}
|
@ -150,14 +150,14 @@ public class BaidController : BaseController<BaidController>
|
||||
GotDanMax = maxDan,
|
||||
GotDanFlg = gotDanFlagArray,
|
||||
GotDanextraFlg = new byte[20],
|
||||
DefaultToneSetting = 0,
|
||||
DefaultToneSetting = userData.SelectedToneId,
|
||||
GenericInfoFlg = new byte[10],
|
||||
AryCrownCounts = crownCount,
|
||||
AryScoreRankCounts = scoreRankCount,
|
||||
IsDispAchievementOn = userData.DisplayAchievement,
|
||||
DispAchievementType = (uint)achievementDisplayDifficulty,
|
||||
IsDispAchievementTypeSet = true,
|
||||
LastPlayMode = 0,
|
||||
LastPlayMode = userData.LastPlayMode,
|
||||
IsDispSouuchiOn = true,
|
||||
AiRank = 0,
|
||||
AiTotalWin = 0,
|
||||
|
@ -1,4 +1,5 @@
|
||||
using System.Globalization;
|
||||
using System.Buffers.Binary;
|
||||
using System.Globalization;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace TaikoLocalServer.Controllers.Game;
|
||||
@ -176,7 +177,15 @@ public class PlayResultController : BaseController<PlayResultController>
|
||||
};
|
||||
userdata.CostumeData = JsonSerializer.Serialize(costumeData);
|
||||
|
||||
var lastStage = playResultData.AryStageInfoes.Last();
|
||||
var option = BinaryPrimitives.ReadInt16LittleEndian(lastStage.OptionFlg);
|
||||
userdata.OptionSetting = option;
|
||||
userdata.IsSkipOn = lastStage.IsSkipOn;
|
||||
userdata.IsVoiceOn = lastStage.IsVoiceOn;
|
||||
userdata.NotesPosition = lastStage.NotesPosition;
|
||||
|
||||
userdata.LastPlayDatetime = lastPlayDatetime;
|
||||
userdata.LastPlayMode = playResultData.PlayMode;
|
||||
context.UserData.Update(userdata);
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
using System.Collections;
|
||||
using System.Buffers.Binary;
|
||||
using System.Collections;
|
||||
using System.Text.Json;
|
||||
using Throw;
|
||||
|
||||
@ -39,7 +40,7 @@ public class UserDataController : BaseController<UserDataController>
|
||||
}
|
||||
bitSet.CopyTo(uraSongArray, 0);
|
||||
|
||||
var toneArray = new byte[5];
|
||||
var toneArray = new byte[16];
|
||||
Array.Fill(toneArray, byte.MaxValue);
|
||||
|
||||
var recentSongs = context.SongPlayData
|
||||
@ -72,6 +73,9 @@ public class UserDataController : BaseController<UserDataController>
|
||||
// which means database content need to be fixed, so better throw
|
||||
favoriteSongs.ThrowIfNull("Favorite song should never be null!");
|
||||
|
||||
var defaultOptions = new byte[2];
|
||||
BinaryPrimitives.WriteInt16LittleEndian(defaultOptions, userData.OptionSetting);
|
||||
|
||||
var response = new UserDataResponse
|
||||
{
|
||||
Result = 1,
|
||||
@ -85,7 +89,8 @@ public class UserDataController : BaseController<UserDataController>
|
||||
IsChallengecompe = false,
|
||||
SongRecentCnt = (uint)recentSongs.Length,
|
||||
AryFavoriteSongNoes = favoriteSongs,
|
||||
AryRecentSongNoes = recentSongs
|
||||
AryRecentSongNoes = recentSongs,
|
||||
NotesPosition = userData.NotesPosition
|
||||
};
|
||||
|
||||
|
||||
|
@ -7,11 +7,13 @@
|
||||
public string Title { get; set; } = string.Empty;
|
||||
public uint TitlePlateId { get; set; }
|
||||
public string FavoriteSongsArray { get; set; } = string.Empty;
|
||||
public int OptionSetting { get; set; }
|
||||
public short OptionSetting { get; set; }
|
||||
public int NotesPosition { get; set; }
|
||||
public bool IsVoiceOn { get; set; }
|
||||
public bool IsSkipOn { get; set; }
|
||||
public uint SelectedToneId { get; set; }
|
||||
public DateTime LastPlayDatetime { get; set; }
|
||||
public long LastPlayMode { get; set; }
|
||||
public uint LastPlayMode { get; set; }
|
||||
public uint ColorBody { get; set; }
|
||||
public uint ColorFace { get; set; }
|
||||
public uint ColorLimb { get; set; }
|
||||
|
326
TaikoLocalServer/Migrations/20220905132703_AddMoreOptions.Designer.cs
generated
Normal file
326
TaikoLocalServer/Migrations/20220905132703_AddMoreOptions.Designer.cs
generated
Normal file
@ -0,0 +1,326 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using TaikoLocalServer.Context;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace TaikoLocalServer.Migrations
|
||||
{
|
||||
[DbContext(typeof(TaikoDbContext))]
|
||||
[Migration("20220905132703_AddMoreOptions")]
|
||||
partial class AddMoreOptions
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder.HasAnnotation("ProductVersion", "7.0.0-preview.7.22376.2");
|
||||
|
||||
modelBuilder.Entity("TaikoLocalServer.Entities.Card", b =>
|
||||
{
|
||||
b.Property<string>("AccessCode")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<uint>("Baid")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.HasKey("AccessCode");
|
||||
|
||||
b.HasIndex(new[] { "Baid" }, "IX_Card_Baid")
|
||||
.IsUnique();
|
||||
|
||||
b.ToTable("Card", (string)null);
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TaikoLocalServer.Entities.DanScoreDatum", b =>
|
||||
{
|
||||
b.Property<uint>("Baid")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("DanId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("ArrivalSongCount")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("ClearState")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER")
|
||||
.HasDefaultValue(0u);
|
||||
|
||||
b.Property<uint>("ComboCountTotal")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("SoulGaugeTotal")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.HasKey("Baid", "DanId");
|
||||
|
||||
b.ToTable("DanScoreData");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TaikoLocalServer.Entities.DanStageScoreDatum", b =>
|
||||
{
|
||||
b.Property<uint>("Baid")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("DanId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("SongNumber")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("BadCount")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("ComboCount")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("DrumrollCount")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("GoodCount")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("HighScore")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("OkCount")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("PlayScore")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("TotalHitCount")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.HasKey("Baid", "DanId", "SongNumber");
|
||||
|
||||
b.ToTable("DanStageScoreData");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TaikoLocalServer.Entities.SongBestDatum", b =>
|
||||
{
|
||||
b.Property<uint>("Baid")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("SongId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("Difficulty")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("BestCrown")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("BestRate")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("BestScore")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("BestScoreRank")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.HasKey("Baid", "SongId", "Difficulty");
|
||||
|
||||
b.ToTable("SongBestData");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TaikoLocalServer.Entities.SongPlayDatum", b =>
|
||||
{
|
||||
b.Property<long>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("Baid")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("ComboCount")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("Crown")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("Difficulty")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("GoodCount")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("HitCount")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("MissCount")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("OkCount")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<DateTime>("PlayTime")
|
||||
.HasColumnType("datetime");
|
||||
|
||||
b.Property<uint>("Score")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("ScoreRank")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("ScoreRate")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<bool>("Skipped")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("SongId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("SongNumber")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("Baid");
|
||||
|
||||
b.ToTable("SongPlayData");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TaikoLocalServer.Entities.UserDatum", b =>
|
||||
{
|
||||
b.Property<uint>("Baid")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("AchievementDisplayDifficulty")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("ColorBody")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("ColorFace")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("ColorLimb")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("CostumeData")
|
||||
.IsRequired()
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<bool>("DisplayAchievement")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<bool>("DisplayDan")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("FavoriteSongsArray")
|
||||
.IsRequired()
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<bool>("IsSkipOn")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<bool>("IsVoiceOn")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<DateTime>("LastPlayDatetime")
|
||||
.HasColumnType("datetime");
|
||||
|
||||
b.Property<uint>("LastPlayMode")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("MyDonName")
|
||||
.IsRequired()
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<int>("NotesPosition")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<short>("OptionSetting")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("SelectedToneId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("Title")
|
||||
.IsRequired()
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<uint>("TitlePlateId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.HasKey("Baid");
|
||||
|
||||
b.ToTable("UserData");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TaikoLocalServer.Entities.DanScoreDatum", b =>
|
||||
{
|
||||
b.HasOne("TaikoLocalServer.Entities.Card", "Ba")
|
||||
.WithMany()
|
||||
.HasForeignKey("Baid")
|
||||
.HasPrincipalKey("Baid")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Ba");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TaikoLocalServer.Entities.DanStageScoreDatum", b =>
|
||||
{
|
||||
b.HasOne("TaikoLocalServer.Entities.DanScoreDatum", "Parent")
|
||||
.WithMany("DanStageScoreData")
|
||||
.HasForeignKey("Baid", "DanId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Parent");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TaikoLocalServer.Entities.SongBestDatum", b =>
|
||||
{
|
||||
b.HasOne("TaikoLocalServer.Entities.Card", "Ba")
|
||||
.WithMany()
|
||||
.HasForeignKey("Baid")
|
||||
.HasPrincipalKey("Baid")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Ba");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TaikoLocalServer.Entities.SongPlayDatum", b =>
|
||||
{
|
||||
b.HasOne("TaikoLocalServer.Entities.Card", "Ba")
|
||||
.WithMany()
|
||||
.HasForeignKey("Baid")
|
||||
.HasPrincipalKey("Baid")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Ba");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TaikoLocalServer.Entities.UserDatum", b =>
|
||||
{
|
||||
b.HasOne("TaikoLocalServer.Entities.Card", "Ba")
|
||||
.WithMany()
|
||||
.HasForeignKey("Baid")
|
||||
.HasPrincipalKey("Baid")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Ba");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TaikoLocalServer.Entities.DanScoreDatum", b =>
|
||||
{
|
||||
b.Navigation("DanStageScoreData");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
40
TaikoLocalServer/Migrations/20220905132703_AddMoreOptions.cs
Normal file
40
TaikoLocalServer/Migrations/20220905132703_AddMoreOptions.cs
Normal file
@ -0,0 +1,40 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace TaikoLocalServer.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class AddMoreOptions : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AddColumn<int>(
|
||||
name: "NotesPosition",
|
||||
table: "UserData",
|
||||
type: "INTEGER",
|
||||
nullable: false,
|
||||
defaultValue: 0);
|
||||
|
||||
migrationBuilder.AddColumn<uint>(
|
||||
name: "SelectedToneId",
|
||||
table: "UserData",
|
||||
type: "INTEGER",
|
||||
nullable: false,
|
||||
defaultValue: 0u);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropColumn(
|
||||
name: "NotesPosition",
|
||||
table: "UserData");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "SelectedToneId",
|
||||
table: "UserData");
|
||||
}
|
||||
}
|
||||
}
|
@ -226,14 +226,20 @@ namespace TaikoLocalServer.Migrations
|
||||
b.Property<DateTime>("LastPlayDatetime")
|
||||
.HasColumnType("datetime");
|
||||
|
||||
b.Property<long>("LastPlayMode")
|
||||
b.Property<uint>("LastPlayMode")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("MyDonName")
|
||||
.IsRequired()
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<int>("OptionSetting")
|
||||
b.Property<int>("NotesPosition")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<short>("OptionSetting")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<uint>("SelectedToneId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("Title")
|
||||
|
Loading…
Reference in New Issue
Block a user