using Model; using System; using System.Collections.Generic; using System.Data.Entity.Infrastructure; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using System.Data.Entity; //// CHECK Models JSON-Ignore, by: API pending access [ezAuthorize] public class familyMembersController : ApiController { private ezEntities _db = new ezEntities(); // GET api/familymembers public IHttpActionResult Get() { var familyMembers = _db.family_members.ToList(); return Ok(familyMembers); } // GET api/familymembers/5 public IHttpActionResult Get(int id) { var familyMember = _db.family_members.Find(id); if (familyMember == null) { return NotFound(); } return Ok(familyMember); } // POST api/familymembers public IHttpActionResult Post([FromBody] family_members familyMember) { if (!ModelState.IsValid) { return BadRequest(ModelState); } _db.family_members.Add(familyMember); _db.SaveChanges(); return CreatedAtRoute("DefaultApi", new { id = familyMember.num }, familyMember); } // PUT api/familymembers/5 public IHttpActionResult Put(int id, [FromBody] family_members familyMember) { if (!ModelState.IsValid) { return BadRequest(ModelState); } if (id != familyMember.num) { return BadRequest(); } _db.Entry(familyMember).State = EntityState.Modified; try { _db.SaveChanges(); } catch (DbUpdateConcurrencyException ex) { if (!FamilyMemberExists(id)) { return NotFound(); } else { throw; } } return Ok(familyMember); //return StatusCode(HttpStatusCode.NoContent); } // DELETE api/familymembers/5 public IHttpActionResult Delete(int id) { var familyMember = _db.family_members.Find(id); if (familyMember == null) { return NotFound(); } _db.family_members.Remove(familyMember); _db.SaveChanges(); return Ok(familyMember); } // GET api/familymembers/follower/5 [Route("api/familymembers/follower/{followerId}")] public IHttpActionResult GetByFollower(int followerId) { var familyMembers = _db.family_members.Where(fm => fm.follower_num == followerId).ToList(); return Ok(familyMembers); } // GET api/familymembers/GetList [Route("api/familymembers/GetList")] public IHttpActionResult GetList(int page = 1, int pageSize = 10, string sortBy = "num", bool ascending = true) { var query = _db.family_members.AsQueryable(); // 排序 switch (sortBy.ToLower()) { case "num": query = ascending ? query.OrderBy(f => f.num) : query.OrderByDescending(f => f.num); break; case "fam_name": query = ascending ? query.OrderBy(f => f.fam_name) : query.OrderByDescending(f => f.fam_name); break; case "fam_gender": query = ascending ? query.OrderBy(f => f.fam_gender) : query.OrderByDescending(f => f.fam_gender); break; case "fam_title": query = ascending ? query.OrderBy(f => f.fam_title) : query.OrderByDescending(f => f.fam_title); break; case "birthdate": query = ascending ? query.OrderBy(f => f.birthdate) : query.OrderByDescending(f => f.birthdate); break; // 添加其他可能的排序欄位... default: query = ascending ? query.OrderBy(f => f.num) : query.OrderByDescending(f => f.num); break; } // 分頁 var totalCount = query.Count(); var totalPages = (int)Math.Ceiling((double)totalCount / pageSize); var familyMembers = query.Skip((page - 1) * pageSize).Take(pageSize).ToList(); return Ok(new { TotalCount = totalCount, TotalPages = totalPages, Page = page, PageSize = pageSize, Data = familyMembers }); } // GET api/familymembers/count [Route("api/familymembers/count")] public IHttpActionResult GetCount() { var count = _db.family_members.Count(); return Ok(count); } // POST api/familymembers/BatchSave [Route("api/familymembers/BatchSave")] public IHttpActionResult BatchSave([FromBody] List familyMembers) { if (!ModelState.IsValid) { return BadRequest(ModelState); } foreach (var familyMember in familyMembers) { if (familyMember.num == 0) { _db.family_members.Add(familyMember); } else { _db.Entry(familyMember).State = EntityState.Modified; } } _db.SaveChanges(); return Ok(); } // POST api/familymembers/Search [Route("api/familymembers/Search")] public IHttpActionResult Search([FromBody] FamilyMemberSearchModel searchModel) { var query = _db.family_members.AsQueryable(); if (!string.IsNullOrEmpty(searchModel.Name)) { query = query.Where(fm => fm.fam_name.Contains(searchModel.Name)); } if (!string.IsNullOrEmpty(searchModel.Gender)) { query = query.Where(fm => fm.fam_gender == searchModel.Gender); } // 添加更多搜索條件... var result = query.ToList(); return Ok(result); } // GET api/familymembers/zodiac/鼠 [Route("api/familymembers/zodiac/{zodiac}")] public IHttpActionResult GetByZodiac(string zodiac) { var familyMembers = _db.family_members.Where(fm => fm.zodiac == zodiac).ToList(); return Ok(familyMembers); } // GET api/familymembers/age-range?minAge=20&maxAge=30 [Route("api/familymembers/age-range")] public IHttpActionResult GetByAgeRange(int minAge, int maxAge) { var currentDate = DateTime.Now; var familyMembers = _db.family_members .ToList() // 先獲取所有記錄 .Where(fm => fm.birthdate.HasValue && fm.birthdate.Value.AddYears(minAge) <= currentDate && fm.birthdate.Value.AddYears(maxAge) > currentDate) .ToList(); return Ok(familyMembers); } // GET api/familymembers/deceased [Route("api/familymembers/deceased")] public IHttpActionResult GetDeceased() { var deceasedMembers = _db.family_members.Where(fm => fm.deceased == true).ToList(); return Ok(deceasedMembers); } // PUT api/familymembers/5/lunar-birthday [Route("api/familymembers/{id}/lunar-birthday")] public IHttpActionResult UpdateLunarBirthday(int id, [FromBody] string lunarBirthday) { var familyMember = _db.family_members.Find(id); if (familyMember == null) { return NotFound(); } familyMember.lunar_birthday = lunarBirthday; _db.SaveChanges(); return Ok(familyMember); } private bool FamilyMemberExists(int id) { return _db.family_members.Count(e => e.num == id) > 0; } protected override void Dispose(bool disposing) { if (disposing) { _db.Dispose(); } base.Dispose(disposing); } } public class FamilyMemberSearchModel { // 搜索條件... public string Name { get; set; } public string Gender { get; set; } }