From 0342562187bd30a1697f15f0a12bc1233a0b697b Mon Sep 17 00:00:00 2001 From: Nikolai Papin Date: Mon, 29 Sep 2025 16:51:50 +0300 Subject: [PATCH] feat: All models added to game service --- Database/ApplicationContext.cs | 49 +++++++++++++++++++ Models/Database/Dialogue.cs | 16 ++++++ Models/Database/DialogueMessage.cs | 27 ++++++++++ .../Database/DialogueMessageResponseOption.cs | 16 ++++++ Models/Database/Mission.cs | 5 +- Models/Enums/Character.cs | 11 +++++ Models/Enums/CharacterAnimation.cs | 18 +++++++ Models/Enums/MessageStyle.cs | 9 ++++ 8 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 Models/Database/Dialogue.cs create mode 100644 Models/Database/DialogueMessage.cs create mode 100644 Models/Database/DialogueMessageResponseOption.cs create mode 100644 Models/Enums/Character.cs create mode 100644 Models/Enums/CharacterAnimation.cs create mode 100644 Models/Enums/MessageStyle.cs diff --git a/Database/ApplicationContext.cs b/Database/ApplicationContext.cs index e4294e1..f79dc23 100755 --- a/Database/ApplicationContext.cs +++ b/Database/ApplicationContext.cs @@ -20,6 +20,9 @@ public class ApplicationContext : DbContext public required DbSet RankSkillRules { get; set; } public required DbSet PlayerSkills { get; set; } public required DbSet PlayerMissions { get; set; } + public required DbSet Dialogues { get; set; } + public required DbSet DialogueMessages { get; set; } + public required DbSet DialogueMessageResponseOptions { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { @@ -63,6 +66,12 @@ public class ApplicationContext : DbContext .WithMany(m => m.ChildMissions) .HasForeignKey(m => m.ParentMissionId) .IsRequired(false); + // Dialogue relationship for Mission + modelBuilder.Entity() + .HasOne(m => m.Dialogue) + .WithOne(d => d.Mission) + .HasForeignKey(m => m.DialogueId) + .IsRequired(false); // MissionRankRule configurations modelBuilder.Entity() @@ -129,5 +138,45 @@ public class ApplicationContext : DbContext .HasOne(pm => pm.Mission) .WithMany(m => m.PlayerMissions) .HasForeignKey(pm => pm.MissionId); + + // Dialogue configurations + modelBuilder.Entity() + .HasOne(d => d.Mission) + .WithOne(m => m.Dialogue) + .HasForeignKey(d => d.MissionId) + .IsRequired(); + + // DialogueMessage configurations + modelBuilder.Entity() + .HasOne(dm => dm.InitialDialogue) + .WithMany() + .HasForeignKey(dm => dm.InitialDialogueId) + .IsRequired(false) + .OnDelete(DeleteBehavior.Restrict); + modelBuilder.Entity() + .HasOne(dm => dm.InterimDialogue) + .WithMany() + .HasForeignKey(dm => dm.InterimDialogueId) + .IsRequired(false) + .OnDelete(DeleteBehavior.Restrict); + modelBuilder.Entity() + .HasOne(dm => dm.EndDialogue) + .WithMany() + .HasForeignKey(dm => dm.EndDialogueId) + .IsRequired(false) + .OnDelete(DeleteBehavior.Restrict); + + // DialogueMessageResponseOption configurations + modelBuilder.Entity() + .HasOne(dmro => dmro.ParentDialogueMessage) + .WithMany(dm => dm.DialogueMessageResponseOptions) + .HasForeignKey(dmro => dmro.ParentDialogueMessageId) + .IsRequired(); + modelBuilder.Entity() + .HasOne(dmro => dmro.DestinationDialogueMessage) + .WithMany() + .HasForeignKey(dmro => dmro.DestinationDialogueMessageId) + .IsRequired(false) + .OnDelete(DeleteBehavior.Restrict); } } diff --git a/Models/Database/Dialogue.cs b/Models/Database/Dialogue.cs new file mode 100644 index 0000000..8a37cdb --- /dev/null +++ b/Models/Database/Dialogue.cs @@ -0,0 +1,16 @@ +namespace GamificationService.Models.Database; + +public class Dialogue +{ + public Guid Id { get; set; } + + public Guid MissionId { get; set; } + public required Mission Mission { get; set; } + + public Guid InitialDialogueMessageId { get; set; } + public Dialogue? InitialDialogueMessage { get; set; } + public Guid InterimDialogueMessageId { get; set; } + public Dialogue? InterimDialogueMessage { get; set; } + public Guid EndDialogueMessageId { get; set; } + public Dialogue? EndDialogueMessage { get; set; } +} diff --git a/Models/Database/DialogueMessage.cs b/Models/Database/DialogueMessage.cs new file mode 100644 index 0000000..6376d76 --- /dev/null +++ b/Models/Database/DialogueMessage.cs @@ -0,0 +1,27 @@ +using GamificationService.Models.Enums; + +namespace GamificationService.Models.Database; + +public class DialogueMessage +{ + public Guid Id { get; set; } + public Character CharacterLeft { get; set; } = Character.None; + public Character CharacterRight { get; set; } = Character.None; + public CharacterAnimation CharacterLeftAnim { get; set; } = CharacterAnimation.Neutral; + public CharacterAnimation CharacterRightAnim { get; set; } = CharacterAnimation.Neutral; + public string CharacterLeftMessage { get; set; } = string.Empty; + public string CharacterRightMessage { get; set; } = string.Empty; + public MessageStyle CharacterLeftMessageStyle { get; set; } = MessageStyle.Normal; + public MessageStyle CharacterRightMessageStyle { get; set; } = MessageStyle.Normal; + public bool AllowMessageAi { get; set; } + public string MessageAiButtonText { get; set; } = string.Empty; + + public Guid InitialDialogueId { get; set; } + public Dialogue? InitialDialogue { get; set; } + public Guid InterimDialogueId { get; set; } + public Dialogue? InterimDialogue { get; set; } + public Guid EndDialogueId { get; set; } + public Dialogue? EndDialogue { get; set; } + + public ICollection DialogueMessageResponseOptions = new List(); +} diff --git a/Models/Database/DialogueMessageResponseOption.cs b/Models/Database/DialogueMessageResponseOption.cs new file mode 100644 index 0000000..ba07ce4 --- /dev/null +++ b/Models/Database/DialogueMessageResponseOption.cs @@ -0,0 +1,16 @@ +using GamificationService.Models.Enums; + +namespace GamificationService.Models.Database; + +public class DialogueMessageResponseOption +{ + public Guid Id { get; set; } + public string Message { get; set; } = "..."; + public MessageStyle MessageStyle { get; set; } = MessageStyle.Normal; + public int z { get; set; } + + public Guid ParentDialogueMessageId { get; set; } + public required DialogueMessage ParentDialogueMessage { get; set; } + public Guid DestinationDialogueMessageId { get; set; } + public DialogueMessage? DestinationDialogueMessage { get; set; } +} diff --git a/Models/Database/Mission.cs b/Models/Database/Mission.cs index 41fa39e..c32e888 100644 --- a/Models/Database/Mission.cs +++ b/Models/Database/Mission.cs @@ -11,7 +11,10 @@ public class Mission public long ParentMissionId { get; set; } public int ExpReward { get; set; } public int ManaReward { get; set; } - + + public Guid DialogueId { get; set; } + public Dialogue? Dialogue { get; set; } + public ICollection ChildMissions { get; set; } = new List(); public ICollection PlayerMissions { get; set; } = new List(); public ICollection MissionItemRewards { get; set; } = new List(); diff --git a/Models/Enums/Character.cs b/Models/Enums/Character.cs new file mode 100644 index 0000000..8140121 --- /dev/null +++ b/Models/Enums/Character.cs @@ -0,0 +1,11 @@ +namespace GamificationService.Models.Enums; + +public enum Character +{ + None, + Assistant, + Pilot, + Janitor, + Administrator, + Mechanic +} diff --git a/Models/Enums/CharacterAnimation.cs b/Models/Enums/CharacterAnimation.cs new file mode 100644 index 0000000..9ac0ef4 --- /dev/null +++ b/Models/Enums/CharacterAnimation.cs @@ -0,0 +1,18 @@ +namespace GamificationService.Models.Enums; + +public enum CharacterAnimation +{ + Neutral, + Happy, + Laughter, + Mock, + Sad, + Crying, + Annoyed, + Angry, + Threats, + Wave, + Silhouette, + Scared, + Embarassed +} diff --git a/Models/Enums/MessageStyle.cs b/Models/Enums/MessageStyle.cs new file mode 100644 index 0000000..82e8cf1 --- /dev/null +++ b/Models/Enums/MessageStyle.cs @@ -0,0 +1,9 @@ +namespace GamificationService.Models.Enums; + +public enum MessageStyle +{ + Normal, + Loud, + Think, + Action +}