From 697631c8d39c94d635f1f4e43c6dbe2006c871fb Mon Sep 17 00:00:00 2001 From: Tsanie Lily Date: Mon, 7 Aug 2023 08:43:11 +0800 Subject: [PATCH] flower comment supported --- Server/Constants.cs | 5 + Server/Controller/EventApiController.cs | 37 +- .../Controller/EventApiController.structs.cs | 21 +- Server/Controller/FlowerApiController.cs | 2 +- .../Controller/FlowerApiController.structs.cs | 12 +- Server/Controller/ImageController.cs | 2 +- Server/Data/Model/RecordItem.cs | 12 + ...04035653_Add-Hidden-For-Record.Designer.cs | 357 +++++++++++++++++ .../20230804035653_Add-Hidden-For-Record.cs | 28 ++ ...804133228_Add-Title-For-Record.Designer.cs | 361 ++++++++++++++++++ .../20230804133228_Add-Title-For-Record.cs | 28 ++ .../Migrations/FlowerDatabaseModelSnapshot.cs | 8 + Server/Program.cs | 2 +- Server/Properties/launchSettings.json | 2 +- 14 files changed, 860 insertions(+), 17 deletions(-) create mode 100644 Server/Migrations/20230804035653_Add-Hidden-For-Record.Designer.cs create mode 100644 Server/Migrations/20230804035653_Add-Hidden-For-Record.cs create mode 100644 Server/Migrations/20230804133228_Add-Title-For-Record.Designer.cs create mode 100644 Server/Migrations/20230804133228_Add-Title-For-Record.cs diff --git a/Server/Constants.cs b/Server/Constants.cs index e4b247b..6098051 100644 --- a/Server/Constants.cs +++ b/Server/Constants.cs @@ -67,6 +67,7 @@ public sealed class Constants [(int)EventTypes.Sell] = new("sell", "出售", true), [(int)EventTypes.Share] = new("share", "分享"), [(int)EventTypes.Move] = new("move", "移动"), + [(int)EventTypes.Comment] = new("comment", "评论"), }; } @@ -103,6 +104,10 @@ public enum EventTypes /// 移动 /// Move = 14, + /// + /// 评论 + /// + Comment = 15, } /// diff --git a/Server/Controller/EventApiController.cs b/Server/Controller/EventApiController.cs index 07c7411..566580e 100644 --- a/Server/Controller/EventApiController.cs +++ b/Server/Controller/EventApiController.cs @@ -37,6 +37,7 @@ public class EventApiController : BaseController /// p: bool? /// /// + /// 花草唯一 id /// 事件类型 id /// 查询关键字 /// 起始日期 @@ -56,6 +57,7 @@ public class EventApiController : BaseController [HttpGet] [ResponseCache(NoStore = true, Location = ResponseCacheLocation.None)] public ActionResult GetRecords( + [FromQuery(Name = "fid")] int? flowerId, [FromQuery(Name = "eid")] int? eventId, [FromQuery] string? key, [FromQuery] long? from, @@ -74,7 +76,25 @@ public class EventApiController : BaseController SaveDatabase(); - var records = database.Records.Where(r => r.OwnerId == user.Id); + var records = database.Records.Where(r => r.OwnerId == user.Id).Select(r => new RecordItem + { + Id = r.Id, + OwnerId = r.OwnerId, + ByUserId = r.ByUserId, + DateUnixTime = r.DateUnixTime, + EventId = r.EventId, + FlowerId = r.FlowerId, + IsHidden = r.IsHidden, + Latitude = r.Latitude, + Longitude = r.Longitude, + Title = r.Title, + Memo = r.Memo, + ByUserName = string.IsNullOrEmpty(r.ByUserName) && r.ByUserId != null ? database.Users.Single(u => u.Id == r.ByUserId).Name : r.ByUserName + }); + if (flowerId != null) + { + records = records.Where(r => r.FlowerId == flowerId); + } if (eventId != null) { records = records.Where(r => r.EventId == eventId); @@ -99,7 +119,16 @@ public class EventApiController : BaseController records = records.Include(r => r.Photos); } - return Ok(records.ToArray()); + var array = records.ToArray(); + foreach (var r in array) + { + if (string.IsNullOrEmpty(r.ByUserName)) + { + r.ByUserName = user.Name; + } + } + + return Ok(array); } /// @@ -249,8 +278,10 @@ public class EventApiController : BaseController FlowerId = @event.FlowerId, EventId = @event.CategoryId, DateUnixTime = now, + IsHidden = @event.IsHidden, ByUserId = @event.ByUser == null ? user.Id : null, ByUserName = @event.ByUser, + Title = @event.Title, Memo = @event.Memo, Latitude = @event.Latitude, Longitude = @event.Longitude @@ -357,6 +388,7 @@ public class EventApiController : BaseController record.FlowerId = update.FlowerId; record.EventId = update.CategoryId; record.DateUnixTime = now; + record.IsHidden = update.IsHidden; if (update.ByUser == null) { record.ByUserId = user.Id; @@ -367,6 +399,7 @@ public class EventApiController : BaseController record.ByUserId = null; record.ByUserName = update.ByUser; } + record.Title = update.Title; record.Memo = update.Memo; record.Latitude = update.Latitude; record.Longitude = update.Longitude; diff --git a/Server/Controller/EventApiController.structs.cs b/Server/Controller/EventApiController.structs.cs index 64378e2..266018e 100644 --- a/Server/Controller/EventApiController.structs.cs +++ b/Server/Controller/EventApiController.structs.cs @@ -25,21 +25,26 @@ public record EventParameter /// /// 操作人姓名 /// - [Required] [FromForm(Name = "byUser")] - public required string ByUser { get; init; } + public string? ByUser { get; init; } + + /// + /// 标题 + /// + [FromForm(Name = "title")] + public string? Title { get; init; } /// /// 备注 /// [FromForm(Name = "memo")] - public string? Memo { get; set; } + public string? Memo { get; init; } /// /// 纬度 /// [FromForm(Name = "lat")] - public double? Latitude { get; set; } + public double? Latitude { get; init; } /// /// 经度 @@ -47,6 +52,12 @@ public record EventParameter [FromForm(Name = "lon")] public double? Longitude { get; set; } + /// + /// 是否为私有记录 + /// + [FromForm(Name = "hidden")] + public bool? IsHidden { get; init; } + /// /// 关联的照片 /// @@ -64,5 +75,5 @@ public record EventUpdateParameter : EventParameter /// [Required] [FromForm(Name = "id")] - public required int Id { get; set; } + public required int Id { get; init; } } diff --git a/Server/Controller/FlowerApiController.cs b/Server/Controller/FlowerApiController.cs index f0a0ba4..24b4edb 100644 --- a/Server/Controller/FlowerApiController.cs +++ b/Server/Controller/FlowerApiController.cs @@ -301,7 +301,7 @@ public class FlowerApiController : BaseController var loc = database.Records .OrderByDescending(r => r.DateUnixTime) - .FirstOrDefault(r => r.FlowerId == id && (r.EventId == (int)EventTypes.Move || r.EventId == (int)EventTypes.Born)); + .SingleOrDefault(r => r.FlowerId == id && (r.EventId == (int)EventTypes.Move || r.EventId == (int)EventTypes.Born)); if (loc != null) { item.Location = loc.Memo; diff --git a/Server/Controller/FlowerApiController.structs.cs b/Server/Controller/FlowerApiController.structs.cs index 430129f..1876d8f 100644 --- a/Server/Controller/FlowerApiController.structs.cs +++ b/Server/Controller/FlowerApiController.structs.cs @@ -64,25 +64,25 @@ public record FlowerParameter : CoverParameter /// 备注 /// [FromForm(Name = "memo")] - public string? Memo { get; set; } + public string? Memo { get; init; } /// /// 纬度 /// [FromForm(Name = "lat")] - public double? Latitude { get; set; } + public double? Latitude { get; init; } /// /// 经度 /// [FromForm(Name = "lon")] - public double? Longitude { get; set; } + public double? Longitude { get; init; } /// /// 存放位置 /// [FromForm(Name = "location")] - public string? Location { get; set; } + public string? Location { get; init; } } /// @@ -114,13 +114,13 @@ public record FlowerCoverParameter : CoverParameter /// 纬度 /// [FromForm(Name = "lat")] - public double? Latitude { get; set; } + public double? Latitude { get; init; } /// /// 经度 /// [FromForm(Name = "lon")] - public double? Longitude { get; set; } + public double? Longitude { get; init; } } /// diff --git a/Server/Controller/ImageController.cs b/Server/Controller/ImageController.cs index a640db9..5ce34a1 100644 --- a/Server/Controller/ImageController.cs +++ b/Server/Controller/ImageController.cs @@ -93,7 +93,7 @@ public class ImageController : BaseController { return BadRequest(); } - if (!referrer.StartsWith(BaseUrl)) + if (!referrer.StartsWith("https://app.tsanie.org")) { return Forbid(); } diff --git a/Server/Data/Model/RecordItem.cs b/Server/Data/Model/RecordItem.cs index 12ff9fc..c939819 100644 --- a/Server/Data/Model/RecordItem.cs +++ b/Server/Data/Model/RecordItem.cs @@ -61,6 +61,12 @@ public class RecordItem : ILocation [JsonPropertyName("date")] public required long DateUnixTime { get; set; } + /// + /// 是否为私有记录 + /// + [Column("hidden")] + public bool? IsHidden { get; set; } + /// /// 操作人 uid /// @@ -73,6 +79,12 @@ public class RecordItem : ILocation [Column("byname")] public string? ByUserName { get; set; } + /// + /// 标题 + /// + [Column("title")] + public string? Title { get; set; } + /// /// 备注 /// diff --git a/Server/Migrations/20230804035653_Add-Hidden-For-Record.Designer.cs b/Server/Migrations/20230804035653_Add-Hidden-For-Record.Designer.cs new file mode 100644 index 0000000..783c358 --- /dev/null +++ b/Server/Migrations/20230804035653_Add-Hidden-For-Record.Designer.cs @@ -0,0 +1,357 @@ +// +using System; +using Blahblah.FlowerStory.Server.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Blahblah.FlowerStory.Server.Migrations +{ + [DbContext(typeof(FlowerDatabase))] + [Migration("20230804035653_Add-Hidden-For-Record")] + partial class AddHiddenForRecord + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.9"); + + modelBuilder.Entity("Blahblah.FlowerStory.Server.Data.Model.FlowerItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("fid"); + + b.Property("CategoryId") + .HasColumnType("INTEGER") + .HasColumnName("categoryid"); + + b.Property("Cost") + .HasColumnType("real") + .HasColumnName("cost"); + + b.Property("DateBuyUnixTime") + .HasColumnType("INTEGER") + .HasColumnName("datebuy") + .HasAnnotation("Relational:JsonPropertyName", "dateBuy"); + + b.Property("Latitude") + .HasColumnType("REAL") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("REAL") + .HasColumnName("longitude"); + + b.Property("Memo") + .HasColumnType("TEXT") + .HasColumnName("memo"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("name"); + + b.Property("OwnerId") + .HasColumnType("INTEGER") + .HasColumnName("uid"); + + b.Property("Purchase") + .HasColumnType("TEXT") + .HasColumnName("purchase"); + + b.HasKey("Id"); + + b.HasIndex("OwnerId"); + + b.ToTable("flowers"); + }); + + modelBuilder.Entity("Blahblah.FlowerStory.Server.Data.Model.PhotoItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("pid"); + + b.Property("DateUploadUnixTime") + .HasColumnType("INTEGER") + .HasColumnName("dateupload") + .HasAnnotation("Relational:JsonPropertyName", "dateUpload"); + + b.Property("FileName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("filename"); + + b.Property("FileType") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("filetype"); + + b.Property("FlowerId") + .HasColumnType("INTEGER") + .HasColumnName("fid"); + + b.Property("Height") + .HasColumnType("INTEGER") + .HasColumnName("height"); + + b.Property("OwnerId") + .HasColumnType("INTEGER") + .HasColumnName("uid"); + + b.Property("Path") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("path"); + + b.Property("RecordId") + .HasColumnType("INTEGER") + .HasColumnName("rid"); + + b.Property("Width") + .HasColumnType("INTEGER") + .HasColumnName("width"); + + b.HasKey("Id"); + + b.HasIndex("FlowerId"); + + b.HasIndex("OwnerId"); + + b.HasIndex("RecordId"); + + b.ToTable("photos"); + }); + + modelBuilder.Entity("Blahblah.FlowerStory.Server.Data.Model.RecordItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("rid"); + + b.Property("ByUserId") + .HasColumnType("INTEGER") + .HasColumnName("byuid"); + + b.Property("ByUserName") + .HasColumnType("TEXT") + .HasColumnName("byname"); + + b.Property("DateUnixTime") + .HasColumnType("INTEGER") + .HasColumnName("date") + .HasAnnotation("Relational:JsonPropertyName", "date"); + + b.Property("EventId") + .HasColumnType("INTEGER") + .HasColumnName("eid"); + + b.Property("FlowerId") + .HasColumnType("INTEGER") + .HasColumnName("fid"); + + b.Property("Hidden") + .HasColumnType("INTEGER") + .HasColumnName("hidden"); + + b.Property("Latitude") + .HasColumnType("REAL") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("REAL") + .HasColumnName("longitude"); + + b.Property("Memo") + .HasColumnType("TEXT") + .HasColumnName("memo"); + + b.Property("OwnerId") + .HasColumnType("INTEGER") + .HasColumnName("uid"); + + b.HasKey("Id"); + + b.HasIndex("FlowerId"); + + b.HasIndex("OwnerId"); + + b.ToTable("records"); + }); + + modelBuilder.Entity("Blahblah.FlowerStory.Server.Data.Model.TokenItem", b => + { + b.Property("Id") + .HasColumnType("TEXT") + .HasColumnName("tid"); + + b.Property("ActiveDateUnixTime") + .HasColumnType("INTEGER") + .HasColumnName("activedate") + .HasAnnotation("Relational:JsonPropertyName", "activeDate"); + + b.Property("ClientAgent") + .HasColumnType("TEXT") + .HasColumnName("clientagent"); + + b.Property("ClientApp") + .HasColumnType("TEXT") + .HasColumnName("clientapp"); + + b.Property("DeviceId") + .HasColumnType("TEXT") + .HasColumnName("deviceid"); + + b.Property("ExpireDateUnixTime") + .HasColumnType("INTEGER") + .HasColumnName("expiredate") + .HasAnnotation("Relational:JsonPropertyName", "expireDate"); + + b.Property("ExpireSeconds") + .HasColumnType("INTEGER") + .HasColumnName("expiresecs"); + + b.Property("LogonDateUnixTime") + .HasColumnType("INTEGER") + .HasColumnName("logondate") + .HasAnnotation("Relational:JsonPropertyName", "logonDate"); + + b.Property("UserId") + .HasColumnType("INTEGER") + .HasColumnName("uid"); + + b.Property("VerifyCode") + .HasColumnType("TEXT") + .HasColumnName("verifycode"); + + b.HasKey("Id"); + + b.ToTable("tokens"); + }); + + modelBuilder.Entity("Blahblah.FlowerStory.Server.Data.Model.UserItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("uid"); + + b.Property("ActiveDateUnixTime") + .HasColumnType("INTEGER") + .HasColumnName("activedate"); + + b.Property("Avatar") + .HasColumnType("BLOB") + .HasColumnName("avatar"); + + b.Property("Email") + .HasColumnType("TEXT") + .HasColumnName("email"); + + b.Property("Level") + .HasColumnType("INTEGER") + .HasColumnName("level"); + + b.Property("Mobile") + .HasColumnType("TEXT") + .HasColumnName("mobile"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("name"); + + b.Property("Password") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("password"); + + b.Property("RegisterDateUnixTime") + .HasColumnType("INTEGER") + .HasColumnName("regdate") + .HasAnnotation("Relational:JsonPropertyName", "registerDate"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("id"); + + b.HasKey("Id"); + + b.ToTable("users"); + }); + + modelBuilder.Entity("Blahblah.FlowerStory.Server.Data.Model.FlowerItem", b => + { + b.HasOne("Blahblah.FlowerStory.Server.Data.Model.UserItem", "Owner") + .WithMany() + .HasForeignKey("OwnerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Owner"); + }); + + modelBuilder.Entity("Blahblah.FlowerStory.Server.Data.Model.PhotoItem", b => + { + b.HasOne("Blahblah.FlowerStory.Server.Data.Model.FlowerItem", "Flower") + .WithMany("Photos") + .HasForeignKey("FlowerId"); + + b.HasOne("Blahblah.FlowerStory.Server.Data.Model.UserItem", "Owner") + .WithMany() + .HasForeignKey("OwnerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Blahblah.FlowerStory.Server.Data.Model.RecordItem", "Record") + .WithMany("Photos") + .HasForeignKey("RecordId"); + + b.Navigation("Flower"); + + b.Navigation("Owner"); + + b.Navigation("Record"); + }); + + modelBuilder.Entity("Blahblah.FlowerStory.Server.Data.Model.RecordItem", b => + { + b.HasOne("Blahblah.FlowerStory.Server.Data.Model.FlowerItem", "Flower") + .WithMany() + .HasForeignKey("FlowerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Blahblah.FlowerStory.Server.Data.Model.UserItem", "Owner") + .WithMany() + .HasForeignKey("OwnerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Flower"); + + b.Navigation("Owner"); + }); + + modelBuilder.Entity("Blahblah.FlowerStory.Server.Data.Model.FlowerItem", b => + { + b.Navigation("Photos"); + }); + + modelBuilder.Entity("Blahblah.FlowerStory.Server.Data.Model.RecordItem", b => + { + b.Navigation("Photos"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Server/Migrations/20230804035653_Add-Hidden-For-Record.cs b/Server/Migrations/20230804035653_Add-Hidden-For-Record.cs new file mode 100644 index 0000000..6d347d6 --- /dev/null +++ b/Server/Migrations/20230804035653_Add-Hidden-For-Record.cs @@ -0,0 +1,28 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Blahblah.FlowerStory.Server.Migrations +{ + /// + public partial class AddHiddenForRecord : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "hidden", + table: "records", + type: "INTEGER", + nullable: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "hidden", + table: "records"); + } + } +} diff --git a/Server/Migrations/20230804133228_Add-Title-For-Record.Designer.cs b/Server/Migrations/20230804133228_Add-Title-For-Record.Designer.cs new file mode 100644 index 0000000..af85ac0 --- /dev/null +++ b/Server/Migrations/20230804133228_Add-Title-For-Record.Designer.cs @@ -0,0 +1,361 @@ +// +using System; +using Blahblah.FlowerStory.Server.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Blahblah.FlowerStory.Server.Migrations +{ + [DbContext(typeof(FlowerDatabase))] + [Migration("20230804133228_Add-Title-For-Record")] + partial class AddTitleForRecord + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.9"); + + modelBuilder.Entity("Blahblah.FlowerStory.Server.Data.Model.FlowerItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("fid"); + + b.Property("CategoryId") + .HasColumnType("INTEGER") + .HasColumnName("categoryid"); + + b.Property("Cost") + .HasColumnType("real") + .HasColumnName("cost"); + + b.Property("DateBuyUnixTime") + .HasColumnType("INTEGER") + .HasColumnName("datebuy") + .HasAnnotation("Relational:JsonPropertyName", "dateBuy"); + + b.Property("Latitude") + .HasColumnType("REAL") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("REAL") + .HasColumnName("longitude"); + + b.Property("Memo") + .HasColumnType("TEXT") + .HasColumnName("memo"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("name"); + + b.Property("OwnerId") + .HasColumnType("INTEGER") + .HasColumnName("uid"); + + b.Property("Purchase") + .HasColumnType("TEXT") + .HasColumnName("purchase"); + + b.HasKey("Id"); + + b.HasIndex("OwnerId"); + + b.ToTable("flowers"); + }); + + modelBuilder.Entity("Blahblah.FlowerStory.Server.Data.Model.PhotoItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("pid"); + + b.Property("DateUploadUnixTime") + .HasColumnType("INTEGER") + .HasColumnName("dateupload") + .HasAnnotation("Relational:JsonPropertyName", "dateUpload"); + + b.Property("FileName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("filename"); + + b.Property("FileType") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("filetype"); + + b.Property("FlowerId") + .HasColumnType("INTEGER") + .HasColumnName("fid"); + + b.Property("Height") + .HasColumnType("INTEGER") + .HasColumnName("height"); + + b.Property("OwnerId") + .HasColumnType("INTEGER") + .HasColumnName("uid"); + + b.Property("Path") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("path"); + + b.Property("RecordId") + .HasColumnType("INTEGER") + .HasColumnName("rid"); + + b.Property("Width") + .HasColumnType("INTEGER") + .HasColumnName("width"); + + b.HasKey("Id"); + + b.HasIndex("FlowerId"); + + b.HasIndex("OwnerId"); + + b.HasIndex("RecordId"); + + b.ToTable("photos"); + }); + + modelBuilder.Entity("Blahblah.FlowerStory.Server.Data.Model.RecordItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("rid"); + + b.Property("ByUserId") + .HasColumnType("INTEGER") + .HasColumnName("byuid"); + + b.Property("ByUserName") + .HasColumnType("TEXT") + .HasColumnName("byname"); + + b.Property("DateUnixTime") + .HasColumnType("INTEGER") + .HasColumnName("date") + .HasAnnotation("Relational:JsonPropertyName", "date"); + + b.Property("EventId") + .HasColumnType("INTEGER") + .HasColumnName("eid"); + + b.Property("FlowerId") + .HasColumnType("INTEGER") + .HasColumnName("fid"); + + b.Property("IsHidden") + .HasColumnType("INTEGER") + .HasColumnName("hidden"); + + b.Property("Latitude") + .HasColumnType("REAL") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("REAL") + .HasColumnName("longitude"); + + b.Property("Memo") + .HasColumnType("TEXT") + .HasColumnName("memo"); + + b.Property("OwnerId") + .HasColumnType("INTEGER") + .HasColumnName("uid"); + + b.Property("Title") + .HasColumnType("TEXT") + .HasColumnName("title"); + + b.HasKey("Id"); + + b.HasIndex("FlowerId"); + + b.HasIndex("OwnerId"); + + b.ToTable("records"); + }); + + modelBuilder.Entity("Blahblah.FlowerStory.Server.Data.Model.TokenItem", b => + { + b.Property("Id") + .HasColumnType("TEXT") + .HasColumnName("tid"); + + b.Property("ActiveDateUnixTime") + .HasColumnType("INTEGER") + .HasColumnName("activedate") + .HasAnnotation("Relational:JsonPropertyName", "activeDate"); + + b.Property("ClientAgent") + .HasColumnType("TEXT") + .HasColumnName("clientagent"); + + b.Property("ClientApp") + .HasColumnType("TEXT") + .HasColumnName("clientapp"); + + b.Property("DeviceId") + .HasColumnType("TEXT") + .HasColumnName("deviceid"); + + b.Property("ExpireDateUnixTime") + .HasColumnType("INTEGER") + .HasColumnName("expiredate") + .HasAnnotation("Relational:JsonPropertyName", "expireDate"); + + b.Property("ExpireSeconds") + .HasColumnType("INTEGER") + .HasColumnName("expiresecs"); + + b.Property("LogonDateUnixTime") + .HasColumnType("INTEGER") + .HasColumnName("logondate") + .HasAnnotation("Relational:JsonPropertyName", "logonDate"); + + b.Property("UserId") + .HasColumnType("INTEGER") + .HasColumnName("uid"); + + b.Property("VerifyCode") + .HasColumnType("TEXT") + .HasColumnName("verifycode"); + + b.HasKey("Id"); + + b.ToTable("tokens"); + }); + + modelBuilder.Entity("Blahblah.FlowerStory.Server.Data.Model.UserItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("uid"); + + b.Property("ActiveDateUnixTime") + .HasColumnType("INTEGER") + .HasColumnName("activedate"); + + b.Property("Avatar") + .HasColumnType("BLOB") + .HasColumnName("avatar"); + + b.Property("Email") + .HasColumnType("TEXT") + .HasColumnName("email"); + + b.Property("Level") + .HasColumnType("INTEGER") + .HasColumnName("level"); + + b.Property("Mobile") + .HasColumnType("TEXT") + .HasColumnName("mobile"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("name"); + + b.Property("Password") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("password"); + + b.Property("RegisterDateUnixTime") + .HasColumnType("INTEGER") + .HasColumnName("regdate") + .HasAnnotation("Relational:JsonPropertyName", "registerDate"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("id"); + + b.HasKey("Id"); + + b.ToTable("users"); + }); + + modelBuilder.Entity("Blahblah.FlowerStory.Server.Data.Model.FlowerItem", b => + { + b.HasOne("Blahblah.FlowerStory.Server.Data.Model.UserItem", "Owner") + .WithMany() + .HasForeignKey("OwnerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Owner"); + }); + + modelBuilder.Entity("Blahblah.FlowerStory.Server.Data.Model.PhotoItem", b => + { + b.HasOne("Blahblah.FlowerStory.Server.Data.Model.FlowerItem", "Flower") + .WithMany("Photos") + .HasForeignKey("FlowerId"); + + b.HasOne("Blahblah.FlowerStory.Server.Data.Model.UserItem", "Owner") + .WithMany() + .HasForeignKey("OwnerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Blahblah.FlowerStory.Server.Data.Model.RecordItem", "Record") + .WithMany("Photos") + .HasForeignKey("RecordId"); + + b.Navigation("Flower"); + + b.Navigation("Owner"); + + b.Navigation("Record"); + }); + + modelBuilder.Entity("Blahblah.FlowerStory.Server.Data.Model.RecordItem", b => + { + b.HasOne("Blahblah.FlowerStory.Server.Data.Model.FlowerItem", "Flower") + .WithMany() + .HasForeignKey("FlowerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Blahblah.FlowerStory.Server.Data.Model.UserItem", "Owner") + .WithMany() + .HasForeignKey("OwnerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Flower"); + + b.Navigation("Owner"); + }); + + modelBuilder.Entity("Blahblah.FlowerStory.Server.Data.Model.FlowerItem", b => + { + b.Navigation("Photos"); + }); + + modelBuilder.Entity("Blahblah.FlowerStory.Server.Data.Model.RecordItem", b => + { + b.Navigation("Photos"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Server/Migrations/20230804133228_Add-Title-For-Record.cs b/Server/Migrations/20230804133228_Add-Title-For-Record.cs new file mode 100644 index 0000000..a9157bc --- /dev/null +++ b/Server/Migrations/20230804133228_Add-Title-For-Record.cs @@ -0,0 +1,28 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Blahblah.FlowerStory.Server.Migrations +{ + /// + public partial class AddTitleForRecord : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "title", + table: "records", + type: "TEXT", + nullable: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "title", + table: "records"); + } + } +} diff --git a/Server/Migrations/FlowerDatabaseModelSnapshot.cs b/Server/Migrations/FlowerDatabaseModelSnapshot.cs index 44cd4fb..678e7ae 100644 --- a/Server/Migrations/FlowerDatabaseModelSnapshot.cs +++ b/Server/Migrations/FlowerDatabaseModelSnapshot.cs @@ -155,6 +155,10 @@ namespace Blahblah.FlowerStory.Server.Migrations .HasColumnType("INTEGER") .HasColumnName("fid"); + b.Property("IsHidden") + .HasColumnType("INTEGER") + .HasColumnName("hidden"); + b.Property("Latitude") .HasColumnType("REAL") .HasColumnName("latitude"); @@ -171,6 +175,10 @@ namespace Blahblah.FlowerStory.Server.Migrations .HasColumnType("INTEGER") .HasColumnName("uid"); + b.Property("Title") + .HasColumnType("TEXT") + .HasColumnName("title"); + b.HasKey("Id"); b.HasIndex("FlowerId"); diff --git a/Server/Program.cs b/Server/Program.cs index 9321e25..1f1dd24 100644 --- a/Server/Program.cs +++ b/Server/Program.cs @@ -11,7 +11,7 @@ public class Program /// public const string ProjectName = "Flower Story"; /// - public const string Version = "0.8.803"; + public const string Version = "1.0.807"; /// public static void Main(string[] args) diff --git a/Server/Properties/launchSettings.json b/Server/Properties/launchSettings.json index 868d3e6..1f921a5 100644 --- a/Server/Properties/launchSettings.json +++ b/Server/Properties/launchSettings.json @@ -13,7 +13,7 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "launchUrl": "#tag/UserApi", + "launchUrl": "swagger", "applicationUrl": "http://localhost:5247", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development"