public async Task UpsertTimecardRecord(string userId, Yyyymmdd ymd, Hhmm hm) { // 既存の月次タイムカードを得る var monthlyTimecardEntity = await GetMonthlyTimecardsByYearMonth(userId, ymd.Year, ymd.Month); IList <TimecardRecord> timecardRecords = new List <TimecardRecord>(); if (monthlyTimecardEntity == null) { // 得られなかったら新たに月次タイムカードを作る monthlyTimecardEntity = new MonthlyTimecardEntity(_paritionKey, userId, $"{ymd.Year:0000}{ymd.Month:00}"); } else { // 得られたら、月次タイムカード内にJsonで入っている各日のタイムカード情報をデシリアライズして得る timecardRecords = monthlyTimecardEntity.GetTimecardsAsList(); } // 月次タイムカード内の各日のタイムカード群から該当日を検索する var hit = timecardRecords.FirstOrDefault(x => x.Day == ymd.Day); if (hit != null) { // 見つかればその終業時刻を書き換え hit.EoWTime = $"{hm.Hour:00}{hm.Minute:00}"; } else { // 見つからなければ新たにタイムカードレコードを作って追加 var newRecord = new TimecardRecord() { Day = ymd.Day, EoWTime = $"{hm.Hour:00}{hm.Minute:00}" }; timecardRecords.Add(newRecord); } // Jsonにシリアライズして戻す monthlyTimecardEntity.SetTimecardDataJsonFromList(timecardRecords); // 月次タイムカードをUpsertする var upsertOp = TableOperation.InsertOrReplace(monthlyTimecardEntity); await _monthlyTimecardTable.ExecuteAsync(upsertOp); }
public async Task <MonthlyTimecardEntity> GetMonthlyTimecardsByYearMonth(string userId, int year, int month) { // ユーザーIDが存在するかのクエリ var retrieveOp = TableOperation.Retrieve <MonthlyTimecardEntity>( _paritionKey, MonthlyTimecardEntity.MakeRowkey(userId, $"{year:0000}{month:00}")); // 検索実行 var taskResult = await _monthlyTimecardTable.ExecuteAsync(retrieveOp); if (taskResult.Result != null) { return((MonthlyTimecardEntity)taskResult.Result); } else { return(null); } }