public IActionResult GetStocks() { try { using UserProfileContext userProfileContext = CreateUserProfileContext(out DbSet <RegisteredUser> registeredUsers, out DbSet <StockSong> stockSongs, out _); if (!IsTokenValid(registeredUsers, out RegisteredUser? loginUser)) { return(Unauthorized()); } // キャッシュチェック DateTime lastModified = ServerCommon.LastModified(ServerConstants.FILE_NAME_USER_PROFILES); if (IsEntityTagValid(YbdCommon.DateTimeToModifiedJulianDate(lastModified))) { Debug.WriteLine("GetStocks() キャッシュ有効: "); return(NotModified()); } StockSong[] results = stockSongs.Where(x => x.UserId == loginUser.Id).OrderByDescending(x => x.RequestTime).ToArray(); EntityTagHeaderValue eTag = GenerateEntityTag(YbdCommon.DateTimeToModifiedJulianDate(lastModified)); return(File(JsonSerializer.SerializeToUtf8Bytes(results), ServerConstants.MIME_TYPE_JSON, lastModified, eTag)); } catch (Exception excep) { Debug.WriteLine("後で歌う予定リスト取得サーバーエラー:\n" + excep.Message); Debug.WriteLine(" スタックトレース:\n" + excep.StackTrace); return(InternalServerError()); } }
public IActionResult GetUserNames() { try { // キャッシュチェック DateTime lastModified = ServerCommon.LastModified(ServerConstants.FILE_NAME_REQUEST_SONGS); if (IsEntityTagValid(YbdCommon.DateTimeToModifiedJulianDate(lastModified))) { Debug.WriteLine("GetUserNames() キャッシュ有効: "); return(NotModified()); } using RequestSongContext requestSongContext = CreateRequestSongContext(out DbSet <RequestSong> requestSongs); String[] results = requestSongs.Where(x => x.UserId == String.Empty).Select(x => x.UserName).GroupBy(y => y).Select(z => z.Key).ToArray(); // 追加ヘッダー AddTotalCountToHeader(results.Length); // 予約者名一覧 EntityTagHeaderValue eTag = GenerateEntityTag(YbdCommon.DateTimeToModifiedJulianDate(lastModified)); return(File(JsonSerializer.SerializeToUtf8Bytes(results), ServerConstants.MIME_TYPE_JSON, lastModified, eTag)); } catch (Exception excep) { Debug.WriteLine("予約者名一覧取得サーバーエラー:\n" + excep.Message); Debug.WriteLine(" スタックトレース:\n" + excep.StackTrace); return(InternalServerError()); } }
public IActionResult GetRequestSongs(String?query) { try { // キャッシュチェック DateTime lastModified = ServerCommon.LastModified(ServerConstants.FILE_NAME_REQUEST_SONGS); if (IsEntityTagValid(YbdCommon.DateTimeToModifiedJulianDate(lastModified))) { Debug.WriteLine("GetRequestSongs() キャッシュ有効: " + query); return(NotModified()); } using RequestSongContext requestSongContext = CreateRequestSongContext(out DbSet <RequestSong> requestSongs); // 追加ヘッダー AddTotalCountToHeader(requestSongs.Count()); // 予約一覧 Dictionary <String, String> parameters = YbdCommon.AnalyzeQuery(query); Int32 page = YbdCommon.GetPageFromQueryParameters(parameters); RequestSong[] results = requestSongs.OrderByDescending(x => x.Sort).Skip(YbdConstants.PAGE_SIZE * page).Take(YbdConstants.PAGE_SIZE).ToArray(); EntityTagHeaderValue eTag = GenerateEntityTag(YbdCommon.DateTimeToModifiedJulianDate(lastModified)); return(File(JsonSerializer.SerializeToUtf8Bytes(results), ServerConstants.MIME_TYPE_JSON, lastModified, eTag)); } catch (Exception excep) { Debug.WriteLine("予約一覧取得サーバーエラー:\n" + excep.Message); Debug.WriteLine(" スタックトレース:\n" + excep.StackTrace); return(InternalServerError()); } }
public IActionResult GetUsers() { try { using UserProfileContext userProfileContext = CreateUserProfileContext(out DbSet <RegisteredUser> registeredUsers, out _, out _); if (!IsTokenValid(registeredUsers, out RegisteredUser? loginUser) || !loginUser.IsAdmin) { return(Unauthorized()); } // キャッシュチェック DateTime lastModified = ServerCommon.LastModified(ServerConstants.FILE_NAME_USER_PROFILES); if (IsEntityTagValid(YbdCommon.DateTimeToModifiedJulianDate(lastModified))) { Debug.WriteLine("GetUsers() キャッシュ有効: "); return(NotModified()); } RegisteredUser[] registeredUsersArray = registeredUsers.Where(x => !x.IsAdmin).OrderBy(x => x.Name).ToArray(); PublicUserInfo[] results = new PublicUserInfo[registeredUsersArray.Length]; for (Int32 i = 0; i < registeredUsersArray.Length; i++) { PublicUserInfo publicUserInfo = new(); registeredUsersArray[i].CopyPublicInfo(publicUserInfo, true); results[i] = publicUserInfo; } EntityTagHeaderValue eTag = GenerateEntityTag(YbdCommon.DateTimeToModifiedJulianDate(lastModified)); return(File(JsonSerializer.SerializeToUtf8Bytes(results), ServerConstants.MIME_TYPE_JSON, lastModified, eTag)); } catch (Exception excep) { Debug.WriteLine("ユーザー一覧取得サーバーエラー:\n" + excep.Message); Debug.WriteLine(" スタックトレース:\n" + excep.StackTrace); return(InternalServerError()); } }
public IActionResult GetPublicUserInfo(String?id) { try { // キャッシュチェック DateTime lastModified = ServerCommon.LastModified(ServerConstants.FILE_NAME_USER_PROFILES); if (IsEntityTagValid(YbdCommon.DateTimeToModifiedJulianDate(lastModified))) { Debug.WriteLine("GetPublicUserInfo() キャッシュ有効: " + id); return(NotModified()); } if (String.IsNullOrEmpty(id)) { return(BadRequest()); } using UserProfileContext userProfileContext = CreateUserProfileContext(out DbSet <RegisteredUser> registeredUsers, out _, out _); RegisteredUser?registeredUser = registeredUsers.SingleOrDefault(x => x.Id == id); if (registeredUser == null) { return(NotAcceptable()); } PublicUserInfo userInfo = new PublicUserInfo(); registeredUser.CopyPublicInfo(userInfo, false); EntityTagHeaderValue eTag = GenerateEntityTag(YbdCommon.DateTimeToModifiedJulianDate(lastModified)); return(File(JsonSerializer.SerializeToUtf8Bytes(userInfo), ServerConstants.MIME_TYPE_JSON, lastModified, eTag)); } catch (Exception excep) { Debug.WriteLine("公開ユーザー情報取得サーバーエラー:\n" + excep.Message); Debug.WriteLine(" スタックトレース:\n" + excep.StackTrace); return(InternalServerError()); } }
public IActionResult SearchByWord(String?query) { try { // キャッシュチェック DateTime lastModified = ServerCommon.LastModified(ServerConstants.FILE_NAME_AVAILABLE_SONGS); if (IsEntityTagValid(YbdCommon.DateTimeToModifiedJulianDate(lastModified))) { Debug.WriteLine("SearchByWord() キャッシュ有効: " + query); return(NotModified()); } SearchWord searchWord = new SearchWord(query); if (!searchWord.IsValid(out String? errorMessage)) { return(BadRequest()); } using AvailableSongContext availableSongContext = CreateAvailableSongContext(out DbSet <AvailableSong> availableSongs); IQueryable <AvailableSong> searchResults = availableSongs; if (searchWord.Type == SearchWordType.AnyWord) { // なんでも検索 String[] anyWords = SplitKeyword(searchWord.AnyWord); for (Int32 i = 0; i < anyWords.Length; i++) { searchResults = SearchByAnyWord(searchResults, anyWords[i]); } } else { // 曲名 // ToDo: SearchBySongName() を関数化すると実行できるが、地の文にすると例外が発生する String[] songNames = SplitKeyword(searchWord.SongName); for (Int32 i = 0; i < songNames.Length; i++) { searchResults = SearchBySongName(searchResults, songNames[i]); } // タイアップ名 String[] tieUpNames = SplitKeyword(searchWord.TieUpName); for (Int32 i = 0; i < tieUpNames.Length; i++) { searchResults = SearchByTieUpName(searchResults, tieUpNames[i]); } // 歌手名 String[] artistNames = SplitKeyword(searchWord.ArtistName); for (Int32 i = 0; i < artistNames.Length; i++) { searchResults = SearchByArtistName(searchResults, artistNames[i]); } // 制作会社 String[] makers = SplitKeyword(searchWord.MakerName); for (Int32 i = 0; i < makers.Length; i++) { searchResults = SearchByMaker(searchResults, makers[i]); } // カラオケ動画制作者 String[] workers = SplitKeyword(searchWord.Worker); for (Int32 i = 0; i < workers.Length; i++) { searchResults = SearchByWorker(searchResults, workers[i]); } // ファイル名 String[] pathes = SplitKeyword(searchWord.Path); for (Int32 i = 0; i < pathes.Length; i++) { searchResults = SearchByPath(searchResults, pathes[i]); } } // 追加ヘッダー AddTotalCountToHeader(searchResults.Count()); // 検索結果は AvailableSongContext の寿命と共に尽きるようなので、ToArray() で新しいコンテナに格納する AvailableSong[] results = SortSearchResult(searchResults, searchWord.Sort).Skip(YbdConstants.PAGE_SIZE * searchWord.Page).Take(YbdConstants.PAGE_SIZE).ToArray(); EntityTagHeaderValue eTag = GenerateEntityTag(YbdCommon.DateTimeToModifiedJulianDate(lastModified)); return(File(JsonSerializer.SerializeToUtf8Bytes(results), ServerConstants.MIME_TYPE_JSON, lastModified, eTag)); } catch (Exception excep) { Debug.WriteLine("キーワード検索サーバーエラー:\n" + excep.Message); Debug.WriteLine(" スタックトレース:\n" + excep.StackTrace); return(InternalServerError()); } }