This commit is contained in:
Chris Chen 2025-11-02 18:26:41 -08:00
parent afb9b91dbb
commit 79c61db8fc
33 changed files with 32 additions and 1185 deletions

View File

@ -1,31 +0,0 @@
using Church.Net.Entity.Interface;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
namespace Church.Net.Entity
{
public class AddressInfo : IEntity
{
public AddressInfo()
{
Id = "new";
}
[Key]
public string Id { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Zip { get; set; }
public string GetCSZ()
{
string result = City;
string sz = $"{State} {Zip}".Trim();
return result + (string.IsNullOrWhiteSpace(sz) ? "" : $", {sz}");
}
}
}

View File

@ -1,46 +0,0 @@
using Church.Net.Entity.Interface;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Church.Net.Entity
{
public class AutoReplyItem : IEntity
{
[Required, Key]
public string Id { get; set; }
public string Command { get; set; }
public string Description { get; set; }
public string Content { get; set; }
public virtual ICollection<PastoralDomainAutoReplys> AutoReplyItemRelations { get; set; }
}
public class PastoralDomainAutoReplys : ICombinedKeyEntity
{
public PastoralDomainAutoReplys()
{
}
public PastoralDomainAutoReplys(string pastoralDomainCId, string autoReplyItemId)
{
PastoralDomainCommunityAppId = pastoralDomainCId;
AutoReplyItemId = autoReplyItemId;
}
[ForeignKey("PastoralDomain")]
[Required, Key, Column(Order = 0)]
public string PastoralDomainCommunityAppId { get; set; }
public virtual PastoralDomain PastoralDomain { get; set; }
[ForeignKey("FamilyMember")]
[Required, Key, Column(Order = 1)]
public string AutoReplyItemId { get; set; }
public virtual AutoReplyItem FamilyMember { get; set; }
}
}

View File

@ -1,18 +0,0 @@
using Church.Net.Entity.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Church.Net.Entity
{
public class BibleBook
{
public int Id { get; set; }
public string Chinese { get; set; }
public string ChineseShort { get; set; }
public string English { get; set; }
public string EnglishShort { get; set; }
}
}

View File

@ -1,21 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Church.Net.Entity
{
public class BibleStudy
{
public DateTime Date { get; set; }
public string Topic { get; set; }
[ForeignKey("Book")]
public string Id { get; set; }
public BibleBook Book { get; set; }
public string Chapter { get; set; }
public int VerseStart { get; set; }
public int VerseEnd { get; set; }
}
}

View File

@ -1,19 +0,0 @@
using Church.Net.Entity.Interface;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Church.Net.Entity
{
public class Career : IEntity
{
[Required, Key]
public string Id { get; set; }
[StringLength(50)]
public string Name { get; set; }
}
}

View File

@ -1,68 +0,0 @@
using Church.Net.Entity.Interface;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Church.Net.Entity
{
public class CellGroupRoutineEvent : IEntity
{
[Required, Key]
public string Id { get; set; }
[Required]
public DateTime Time { get; set; }
public string Address { get; set; }
public virtual ICollection<CellGroupRoutineEventAttendee> Attendees { get; set; }
public virtual ICollection<CellGroupRoutineEventPrayer> Prayers { get; set; }
[ForeignKey("CellGroupInfo")]
public string PastoralDomainId { get; set; }
public PastoralDomain CellGroupInfo { get; set; }
}
public class CellGroupRoutineEventAttendee : ICombinedKeyEntity
{
[ForeignKey("CellGroupRoutineEvent")]
[Key, Column(Order = 0)]
public string EventId { get; set; }
public CellGroupRoutineEvent CellGroupRoutineEvent { get; set; }
[Required, Key, Column(Order = 1)]
public string Id { get; set; }
public string Name { get; set; }
public bool JoinPotluck { get; set; }
public string PotluckItem { get; set; }
public string Comment { get; set; }
}
public class CellGroupRoutineEventWorship : ICombinedKeyEntity
{
[ForeignKey("CellGroupRoutineEvent")]
[Key, Column(Order = 0)]
public string EventId { get; set; }
[Required, Key, Column(Order = 1)]
public string WorshipVideoId { get; set; }
public string Comment { get; set; }
}
public class CellGroupRoutineEventPrayer : ICombinedKeyEntity
{
[ForeignKey("CellGroupRoutineEvent")]
[Key, Column(Order = 0)]
public string EventId { get; set; }
public CellGroupRoutineEvent CellGroupRoutineEvent { get; set; }
[Required, Key, Column(Order = 1)]
public string MemberId { get; set; }
public string Prayer { get; set; }
public string Comment { get; set; }
}
}

View File

@ -1,17 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<PackageOutputPath>\\ArkNAS\home\Nuget Packages</PackageOutputPath>
<AssemblyVersion>1.0.0.4</AssemblyVersion>
<FileVersion>1.0.0.4</FileVersion>
<Version>1.0.0.4</Version>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
</ItemGroup>
</Project>

View File

@ -1,23 +0,0 @@
using Church.Net.Entity.Interface;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.Text;
using System.ComponentModel;
namespace Church.Net.Entity
{
public class Contribution : IEntity
{
[ForeignKey("HappinessGroup")]
public string GroupId { get; set; }
public PastoralDomain HappinessGroup { get; set; }
[Key]
public string Id { get; set; }
public string Contributor { get; set; }
public decimal Amount { get; set; }
public string Comment { get; set; }
public DateTime Time { get; set; }
}
}

View File

@ -1,55 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Church.Net.Entity
{
public class Enumeration
{
public enum Gender
{
Female=0,
Male=1
}
public enum Month
{
January=1,
Feburary,
March,
April,
May,
June,
July,
August,
September,
October,
November,
December
}
public enum PartsOfSpeech
{
Nouns,
Verbs,
VerbsUnRegular,
Pronouns,
Adverbs,
Adjectives,
Conjunctions,
Articles,
Prepositions
}
public enum PracticeStage
{
Select,
Memorized,
Visualize,
Apply,
Review,
FlashCard
}
}
}

View File

@ -1,71 +0,0 @@
using Church.Net.Entity.Interface;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
namespace Church.Net.Entity
{
[Flags]
public enum Role
{
None = 0,
FamilyMember = 1 << 0, // 0001 -- the bitshift is unnecessary, but done for consistency
CellGroupLeader = 1 << 1, // 0010
Pastor = 1 << 2, // 0100
Admin = 1 << 3, // 1111
Best = 1 << 4, // 1111
All = ~(~0 << 20) // 1111
}
public class FamilyMember : IEntity
{
public FamilyMember()
{
}
[Key]
public string Id { get; set; }
public string Email { get; set; }
[JsonIgnore]
public string Password { get; set; }
public string AvatarImage { get; set; }
[StringLength(50)]
public string FirstName { get; set; }
[StringLength(50)]
public string LastName { get; set; }
public Enumeration.Gender Gender { get; set; }
public DateTime? Birthday { get; set; }
public bool Married { get; set; }
public bool Baptized { get; set; }
public DateTime? DateOfBaptized { get; set; }
public DateTime? DateOfWalkIn { get; set; }
[StringLength(500)]
public string Address { get; set; }
[StringLength(50)]
public string ComunityAppId { get; set; }
[ForeignKey("Career")]
public string CareerId { get; set; }
public Career Career { get; set; }
public virtual ICollection<PastoralDomainMembers> PastoralDomains { get; set; }
public virtual ICollection<FamilyMemberOAuth> OAuthInfos { get; set; }
public string Comment { get; set; }
public Role Role { get; set; }
}
}

View File

@ -1,19 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.Text;
namespace Church.Net.Entity
{
public class FamilyMemberOAuth
{
[ForeignKey("HappinessGroup")]
[Key, Column(Order = 0)]
public string FamilyMemberId { get; set; }
[Required, Key, Column(Order = 1)]
public string OAuthType { get; set; }
public string OAuthAccessToken { get; set; }
}
}

View File

@ -1,155 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.Text;
using Newtonsoft.Json;
using Church.Net.Entity.Interface;
namespace Church.Net.Entity.Games.MD2
{
public enum MobType
{
Mob,
RoamingMonster,
Boss
}
public enum GameBundle
{
CoreGame,
HeavenFallen,
Zombiecide,
}
public enum MobSkillType
{
Attack,
Defense,
Combat,
Passive
}
public enum MobSkillTarget
{
Random = 40,
LeastHp = 50,
LeastMp = 60,
HighestHp = 70,
HighestMp = 80,
LowestLevel = 90,
MostCorruption = 200,
LeastCorruption = 201
}
public enum MD2Icon
{
Attack,
Defense,
Mana,
Shadow,
EnemySkill,
EnemyClaw,
Reroll,
Fire,
Frost,
OneHand,
TwoHand,
Helmet,
Armor,
Ring,
Foot,
Melee,
Range,
Magic,
HP,
MP,
Dice,
Arrow,
ArrowBullseye,
ArrowOverload,
SoulToken,
Rage,
RedDice,
BlueDice,
YellowDice,
OrangeDice,
BlackDice
}
public class MobInfo : IEntity
{
[Key]
public string Id { get; set; }
public MobType Type { get; set; }
public GameBundle From { get; set; }
public string Name { get; set; }
public string LeaderImgUrl { get; set; }
public string MinionImgUrl { get; set; }
public virtual ICollection<MobLevelInfo> MobLevelInfos { get; set; }
public virtual ICollection<MobSkill> Skills { get; set; }
}
public class MobLevelInfo : IEntity
{
[Key]
public string Id { get; set; }
[ForeignKey("MobInfo")]
public string MobInfoId { get; set; }
[JsonIgnore]
public virtual MobInfo MobInfo { get; set; }
public int RewardTokens { get; set; }
public int FixedRareTreasure { get; set; }
public int FixedEpicTreasure { get; set; }
public int FixedLegendTreasure { get; set; }
public int FixedHp { get; set; }
public int HpPerHero { get; set; }
public int Actions { get; set; }
[ForeignKey("AttackInfo")]
public string AttackInfoId { get; set; }
public MD2DiceSet AttackInfo { get; set; }
[ForeignKey("DefenceInfo")]
public string DefenceInfoId { get; set; }
public MD2DiceSet DefenceInfo { get; set; }
public virtual ICollection<MobSkill> Skills { get; set; }
}
public class MobSkill : IEntity
{
[Key]
public string Id { get; set; }
[ForeignKey("MobLevelInfo")]
public string MobLevelInfoId { get; set; }
[ForeignKey("MobInfo")]
public string MobInfoId { get; set; }
[JsonIgnore]
public virtual MobInfo MobInfo { get; set; }
[JsonIgnore]
public virtual MobLevelInfo MobLevelInfo { get; set; }
public MobSkillType Type { get; set; }
public MobSkillTarget? SkillTarget { get; set; }
public int ClawRoll { get; set; }
public int SkillRoll { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
public class MD2DiceSet : IEntity
{
[Key]
public string Id { get; set; }
public int? Yellow { get; set; }
public int? Orange { get; set; }
public int? Red { get; set; }
public int? Blue { get; set; }
public int? Green { get; set; }
public int? Black { get; set; }
}
}

View File

@ -1,26 +0,0 @@
using Church.Net.Entity.Interface;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Church.Net.Entity
{
public class HappinessBEST : IEntity
{
[ForeignKey("HappinessGroup")]
public string GroupId { get; set; }
public PastoralDomain HappinessGroup { get; set; }
[Key]
public string Id { get; set; }
[Required]
public string Name { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
}
}

View File

@ -1,76 +0,0 @@
using Church.Net.Entity.Interface;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Church.Net.Entity
{
public class HappinessWeek : IEntity
{
[ForeignKey("HappinessGroup")]
public string GroupId { get; set; }
public PastoralDomain HappinessGroup { get; set; }
[Required, Key]
public string Id { get; set; }
public DateTime Date { get; set;}
public string InvitationText { get; set; }
public string Address { get; set; }
public string CityAndZipCode { get; set; }
public int SEQ { get; set; }
[NotMapped]
public bool UpdateRestWeekDate { get; set; }
[NotMapped]
public string Topic { get; set; }
public virtual ICollection<HappinessTask> Tasks { get; set; }
public virtual ICollection<HappinessCost> Costs { get; set; }
public string Comment { get; set; }
}
public enum HappinessTaskType
{
[Description("帶遊戲")]
IceBreak,
[Description("唱歌")]
Worship,
[Description("見證")]
Testimony,
[Description("信息")]
Message,
[Description("準備禮物")]
Gift,
[Description("準備點心")]
Dessert
}
public class HappinessTask : IEntity
{
[ForeignKey("HappinessWeek")]
public string WeekId { get; set; }
public HappinessWeek HappinessWeek { get; set; }
[Required, Key]
public string Id { get; set; }
public HappinessTaskType Type { get; set; }
public string Tasker { get; set; }
public string Content { get; set; }
}
public class HappinessCost : IEntity
{
[ForeignKey("HappinessWeek")]
public string WeekId { get; set; }
public HappinessWeek HappinessWeek { get; set; }
[Key]
public string Id { get; set; }
public string Tasker { get; set; }
public string Content { get; set; }
public decimal Amount { get; set; }
}
}

View File

@ -1,18 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Church.Net.Entity.Interface
{
public interface IEntity
{
string Id { get; set; }
}
public interface ICombinedKeyEntity
{
}
public interface IBussinessEntity
{
Guid Id { get; set; }
}
}

View File

@ -1,26 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Church.Net.Entity.Interface
{
public interface ILog
{
int TrackNo { get; set; }
string DetailMessage { get; set; }
string Message { get; set; }
Guid Id { get; set; }
string Source { get; set; }
string StackTrace { get; set; }
DateTime Time { get; set; }
string Url { get; set; }
LogLevel Level { get; set; }
string UserId { get; set; }
}
public enum LogLevel
{
Info,
Warning,
Error
}
}

View File

@ -1,39 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace Church.Net.Entity.Interface
{
public enum MessengerType
{
Email,
Line,
Wechat,
SMS
}
public interface IMessenger
{
MessengerType Type { get; }
Task<bool> SendMessage(IMessengerClient target, string message);
Task<bool> SendMessage(IMessengerClient target, object message);
}
public interface IMessengerClient
{
string Id { get; }
string LineAccountId { get; set; }
LineMessagingAccount LineMessagingAccount { get; set; }
}
public interface IMessageClient: IEntity
{
MessengerType Type { get; }
string ClientId { get; set; }
}
}

View File

@ -1,16 +0,0 @@
using Church.Net.Entity.Interface;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Church.Net.Entity
{
public class LineMessagingAccount : IEntity
{
[Required, Key]
public string Id { get; set; }
public string Name { get; set; }
public string ChatToken { get; set; }
public int TotalUsage { get; set; }
public int Seq { get; set; }
}
}

View File

@ -1,35 +0,0 @@
using Church.Net.Entity.Interface;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;
namespace Church.Net.Entity
{
public class LogInfo : IEntity
{
public LogInfo()
{
}
public LogInfo(LogLevel level)
{
Id = Guid.NewGuid().ToString();
Time = DateTime.UtcNow;
Level = level;
}
public string Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int TrackNo { get; set; }
public string Url { get; set; }
public string Message { get; set; }
public string Source { get; set; }
public string StackTrace { get; set; }
public string DetailMessage { get; set; }
public string UserId { get; set; }
public DateTime Time { get; set; }
public LogLevel Level { get; set; }
}
}

View File

@ -1,20 +0,0 @@
using Church.Net.Entity.Interface;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
namespace Church.Net.Entity.Messenger
{
public class LineMessageClient : IMessageClient
{
public MessengerType Type => MessengerType.Line;
[Required, Key]
public string Id { get; set; }
public string ClientId { get; set; }
public bool IsGroup { get; set; }
public bool IsManager { get; set; }
public string Name { get; set; }
}
}

View File

@ -1,65 +0,0 @@
using Church.Net.Entity.Interface;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Church.Net.Entity
{
public class NewVisitor:IEntity
{
[Key]
public string Id { get; set; }
[StringLength(50)]
[DisplayName("名字")]
[Required]
public string FirstName { get; set; }
[StringLength(50)]
[DisplayName("姓氏")]
[Required]
public string LastName { get; set; }
[DisplayName("性別")]
public Enumeration.Gender Gender { get; set; }
[StringLength(500)]
[DisplayName("地址")]
public string Address { get; set; }
[StringLength(150)]
[DisplayName("電話")]
[Required]
public string Phone { get; set; }
[StringLength(150)]
[DisplayName("E-Mail")]
public string Email { get; set; }
[StringLength(50)]
[DisplayName("社群軟體ID")]
public string ComunityAppId { get; set; }
[DisplayName("首次參加主日時間")]
public DateTime VisitingDate { get; set; }
[System.ComponentModel.DataAnnotations.Schema.NotMapped]
public bool HideBirthDate { get; set; }
[DisplayName("生日")]
public DateTime? BirthDate { get; set; }
[DisplayName("附註")]
public string Note { get; set; }
[ForeignKey("Religion")]
public int? ReligionId { get; set; }
public Religion Religion { get; set; }
//[ForeignKey("VisitingReason")]
//public int VisitingReasonId { get; set; }
//public VisitingReason VisitingReason { get; set; }
}
}

View File

@ -1,73 +0,0 @@
using Church.Net.Entity.Interface;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Church.Net.Entity
{
public enum DomainType
{
CellGroup,
HappinessGroup,
CellGroupCoworker,
ChurchCoworker,
Administrator = 99
}
public class PastoralDomain : IEntity, IMessengerClient
{
public PastoralDomain()
{
}
[Key]
public string Id { get; set; }
public string Name { get; set; }
public string LogoImage { get; set; }
public string Description { get; set; }
public string Image1 { get; set; }
public string Image2 { get; set; }
public string Image3 { get; set; }
public string Image4 { get; set; }
public string Image5 { get; set; }
public string LineGroupId { get; set; }
[ForeignKey("LineMessagingAccount")]
public string LineAccountId { get; set; }
public virtual LineMessagingAccount LineMessagingAccount { get; set; }
[ForeignKey("Leader")]
public string LeaderMemberId { get; set; }
public FamilyMember Leader { get; set; }
[ForeignKey("ServiceAddress")]
public string ServiceAddressId { get; set; }
public AddressInfo ServiceAddress { get; set; }
public DomainType Type { get; set; }
public DateTime? ServiceTime { get; set; }
public string TimeZone { get; set; }
public virtual ICollection<HappinessBEST> Bests { get; set; }
public virtual ICollection<HappinessWeek> HappinessWeeks { get; set; }
public virtual ICollection<Contribution> Contributions { get; set; }
[JsonIgnore]
public virtual ICollection<PastoralDomainMembers> Members { get; set; }
[JsonIgnore]
public virtual IList<PastoralDomainAutoReplys> AutoReplyItemRelations { get; set; }
[NotMapped]
public virtual ICollection<FamilyMember> FamilyMembers { get; set; }
}
}

View File

@ -1,24 +0,0 @@
using Church.Net.Entity.Interface;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Church.Net.Entity
{
public class PastoralDomainInfo : IEntity
{
[Required, Key]
public string Id { get; set; }
[ForeignKey("PastoralDomain")]
public string PastoralDomainId { get; set; }
public PastoralDomain PastoralDomain { get; set; }
}
}

View File

@ -1,38 +0,0 @@
using Church.Net.Entity.Interface;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Church.Net.Entity
{
public class PastoralDomainMembers : ICombinedKeyEntity
{
public PastoralDomainMembers()
{
}
public PastoralDomainMembers(string pastoralDomainId, string familyMemberId)
{
PastoralDomainId = pastoralDomainId;
FamilyMemberId = familyMemberId;
}
[ForeignKey("PastoralDomain")]
[Required, Key, Column(Order = 0)]
public string PastoralDomainId { get; set; }
public virtual PastoralDomain PastoralDomain { get; set; }
[ForeignKey("FamilyMember")]
[Required, Key, Column(Order = 1)]
public string FamilyMemberId { get; set; }
public virtual FamilyMember FamilyMember { get; set; }
}
}

View File

@ -1,18 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Church.Net.Entity
{
public class Religion
{
[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ReligionId { get; set; }
[Display(Name = "宗教信仰")]
public string Name { get; set; }
}
}

View File

@ -1,19 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Security.Principal;
using System.Text;
using System.Threading.Tasks;
namespace Church.Net.Entity
{
public class VisitingReason
{
[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int VisitingReasonId { get; set; }
public string Reason { get; set; }
}
}

View File

@ -1,84 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static Church.Net.Entity.Enumeration;
namespace Church.Net.Entity
{
public class Vocabulary
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public string Word { get; set; }
[Required]
[DataType(DataType.MultilineText)]
public string DefinitionEn { get; set; }
[Required]
[DataType(DataType.MultilineText)]
public string DefinitionCh { get; set; }
public string NounPlural { get; set; }
public string VerbPast { get; set; }
public string VerbParticiple { get; set; }
public PartsOfSpeech PartOfSpeech { get; set; }
public string ImagesUrl { get; set; }
public DateTime InsertDate { get; set; }
public DateTime PracticeDate { get; set; }
public PracticeStage PracticeStage { get; set; }
public bool PracticeSelect { get; set; }
public bool PracticeMemorized { get; set; }
public bool PracticeVisualize { get; set; }
public bool PracticeApply { get; set; }
public bool PracticeReview { get; set; }
[DataType(DataType.MultilineText)]
public string PracticeSentence { get; set; }
public int FlashCardTimes { get; set; }
[NotMapped]
public int PracticeTimes { get; set; }
public string MaskedWord
{
get
{
return GetMaskedWord(Word);
}
}
public string MaskedVerbPast
{
get
{
return GetMaskedWord(VerbPast);
}
}
public string MaskedVerbParticiple
{
get
{
return GetMaskedWord(VerbParticiple);
}
}
private string GetMaskedWord(string word)
{
string reuslt = word.Substring(0, 1);
for (int i = 1; i < word.Length; i++)
{
reuslt = reuslt + " _";
}
reuslt = reuslt + " " + word.Substring(word.Length - 1, 1);
return reuslt;
}
}
}

View File

@ -1,27 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Security.Principal;
using System.Text;
using System.Threading.Tasks;
namespace Church.Net.Entity
{
public class WhoIsSpy
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Answer1Cht { get; set; }
public string Answer1Chs { get; set; }
public string Answer1En { get; set; }
public string Answer1Image => $"WhoIsSpy_{Id}_A.jpg";
public string Answer2Cht { get; set; }
public string Answer2Chs { get; set; }
public string Answer2En { get; set; }
public string Answer2Image => $"WhoIsSpy_{Id}_B.jpg";
}
}

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<UserSecretsId>983731f5-925d-44ec-b4c8-a7c4ad857569</UserSecretsId>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<FileVersion>1.0.0.2</FileVersion>
@ -21,28 +21,28 @@
<ItemGroup>
<PackageReference Include="LineBotSDK" Version="2.8.35" />
<PackageReference Include="Microsoft.AspNet.WebApi.Core" Version="5.2.9" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.8" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.11" />
<PackageReference Include="Microsoft.AspNetCore.SignalR" Version="1.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.8">
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.11">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.8" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.8" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.8">
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.11" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.11" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.11">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.10.9" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.8" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="8.0.7" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.10" />
<PackageReference Include="QRCoder-ImageSharp" Version="0.9.0" />
<PackageReference Include="SharpGrabber.Converter" Version="1.1.0" />
<PackageReference Include="SharpGrabber.YouTube" Version="1.5.0" />
<PackageReference Include="SixLabors.ImageSharp" Version="2.1.3" />
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta15" />
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.6" />
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="2.1.4" />
</ItemGroup>
<ItemGroup>

View File

@ -1,42 +1,36 @@
using System.Threading.Tasks;
using System.Threading;
using System.Web.Http.Filters;
using System;
using System;
using Microsoft.AspNetCore.Mvc.Filters;
using WebAPI.Services.Interfaces;
namespace WebAPI
{
public class HandleExceptionFilter : IExceptionFilter
{
private ILoggingService _loggingService;
private readonly ILoggingService _loggingService;
public HandleExceptionFilter(ILoggingService loggingService)
{
_loggingService = loggingService;
}
public bool AllowMultiple => throw new NotImplementedException();
public Task ExecuteExceptionFilterAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken)
public void OnException(ExceptionContext context)
{
return Task.Run(new Action(() =>
if (context == null)
{
if (actionExecutedContext == null)
{
throw new ArgumentNullException("filterContext");
throw new ArgumentNullException(nameof(context));
}
Exception exception = actionExecutedContext.Exception;
if (actionExecutedContext.Response.StatusCode == System.Net.HttpStatusCode.InternalServerError)
{
Exception exception = context.Exception;
// Log exception
//_loggingService.Error(exception);
int errorTrackNo = _loggingService.Error(exception, actionExecutedContext.Request.RequestUri.AbsoluteUri);
//actionExecutedContext.Exception = new HttpException($"Error Track No:{errorTrackNo}");
string requestUrl = $"{context.HttpContext.Request.Scheme}://{context.HttpContext.Request.Host}{context.HttpContext.Request.Path}{context.HttpContext.Request.QueryString}";
int errorTrackNo = _loggingService.Error(exception, requestUrl);
}
}));
// Optionally, you can set the result here
// context.Result = new ObjectResult($"Error Track No:{errorTrackNo}")
// {
// StatusCode = 500
// };
}
}
}

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Version>1.4.0</Version>
<Authors>Kiyoaki Tsurutani</Authors>
@ -14,7 +14,7 @@
<RepositoryUrl>https://github.com/kiyoaki/LineMessagingApi</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PackageTags>LINE, BOT</PackageTags>
<PackageReleaseNotes>Support .NET 6</PackageReleaseNotes>
<PackageReleaseNotes>Support .NET 8</PackageReleaseNotes>
<SignAssembly>false</SignAssembly>
<AssemblyOriginatorKeyFile>opensource.pfx</AssemblyOriginatorKeyFile>
</PropertyGroup>

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>