示例#1
0
        public void Save(予約希望 予約希望)
        {
            var sqlConnectionSb = new SQLiteConnectionStringBuilder {
                DataSource = "reserve.db"
            };

            using (var cn = new SQLiteConnection(sqlConnectionSb.ToString()))
            {
                cn.Open();

                using (var cmd = new SQLiteCommand(cn))
                {
                    string id = Guid.NewGuid().ToString();
                    cmd.CommandText = "Insert INTO reserve VALUES(" +
                                      "@ID," +
                                      "@ROOM_NAME," +
                                      "@START_DATE_TIME," +
                                      "@END_DATE_TIME)";

                    // if 予約希望.Room.AsString() == hogehoge みたいなこと書けるぜ
                    // if 予約希望.Room.ToString() これだと、なにが返ってくるかわからない?
                    // ToString()が返すなのかが、クラス名なのか、会議室名なのか、わかりづらい??

                    cmd.Parameters.Add(new SQLiteParameter("@ID", id));
                    cmd.Parameters.Add(new SQLiteParameter("@ROOM_NAME", 予約希望.Room.DisplayName));
                    cmd.Parameters.Add(new SQLiteParameter("@START_DATE_TIME", 予約希望.Range.開始日時())); // 2020-05-20 10:00
                    cmd.Parameters.Add(new SQLiteParameter("@END_DATE_TIME", 予約希望.Range.終了日時()));   // 2020-05-20 12:00
                    cmd.ExecuteNonQuery();
                }
            }
        }
        public void Save(予約希望 予約希望)
        {
            Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true;

            var queryWithParameter = QueryBuilder.予約を保存するクエリを生成する(予約希望);

            DBにSaveする(queryWithParameter.template,
                      queryWithParameter.parameter);
        }
        public bool この会議室は予約可能ですか(MeetingRoom room, ReserverId id, 予約期間 range, 想定使用人数 ninzu)
        {
            var other = new 予約希望(room, range);

            bool 被っている   = list.Any(x => x.かぶってますか(other));
            bool 予約可能である = !被っている;

            return(予約可能である);
        }
        /// <summary>
        /// メイン処理
        /// </summary>
        protected override void Main(string[] args)
        {
            // args => string[3] ===> B , "2020-05-10T12:00:00+09:00", "2020-05-10T13:00:00+09:00"

            予約希望 予約希望    = 予約希望つくる(args);
            var  usecase = new ReservationUseCase(_repository);
            var  予約成功したか = usecase.予約する(予約希望);

            Logger.LogInformation($"予約成功したかどうか? ==> {予約成功したか}");
        }
示例#5
0
        //TODO: 返すのはプリミティブ?予約結果? とりあえず一旦プリミティブで。
        public bool 予約する(予約希望 予約希望)
        {
            予約済み群 予約希望日の予約の一覧 = repository.この日の予約一覧をください(予約希望.予約年月日);

            if (予約希望日の予約の一覧.かぶってますか(予約希望))
            {
                return(false);
            }

            repository.Save(予約希望);
            return(true);
        }
示例#6
0
        public void Aという会議室を予約する()
        {
            var 予約希望 = new 予約希望(new MeetingRoom(MeetingRoomName.A),
                                new ReserverId(),
                                new 予約期間(new 予約開始日時(new 予約年月日(2020, 3, 15), 予約開始_時._14, 予約_分._15),
                                         new 予約終了日時(new 予約年月日(2020, 3, 15), 予約終了_時._16, 予約_分._15)),
                                new 想定使用人数());

            var useCase = new ReservationUseCase(new InMemory予約希望Repository());
            var 予約できた   = useCase.予約する(予約希望);

            予約できた.ShouldBeTrue();
        }
        private 予約希望 予約希望つくる(string[] args)
        {
            // TODO: パース(下準備) と、予約希望を作るところを分ける?
            // TODO: meetingRoom, 予約開始DateTime, 予約終了DateTime だけをパースとして分離する?
            // TODO: UIExceptionと、ドメインのExceptionとかを作る。
            //           ==> (ここ→は改めて決定)層ごとに抽象例外クラスを作って、具体的な個々の例外はそのサブクラスにすると扱いやすいと思ってる。
            // TODO2: SQLite 入れるとか、永続化に関することも今後やりたい。

            var meetingRoom  = new MeetingRoom((MeetingRoomName)Enum.Parse(typeof(MeetingRoomName), args[0])); //TODO: TryParse() にする?
            var 予約開始DateTime = DateTime.Parse(args[1]);                                                        // 同上
            var 予約終了DateTime = DateTime.Parse(args[2]);

            予約開始日時 予約開始日時 = 予約時間Parser.予約開始日時をつくる(予約開始DateTime);
            予約終了日時 予約終了日時 = 予約時間Parser.予約終了日時をつくる(予約終了DateTime);

            var 予約希望 = new 予約希望(meetingRoom,
                                new ReserverId(),
                                new 予約期間(予約開始日時, 予約終了日時),
                                new 想定使用人数());

            return(予約希望);
        }
示例#8
0
        public void 新規予約をして予約一覧に予約があること()
        {
            // TODO: テスト名
            var せつぞく        = new ConnectionBuilder("reserve.db");
            var repository  = new DapperSQLite予約希望Repository(せつぞく);
            var meetingRoom = new MeetingRoom(MeetingRoomName.A);

            予約開始日時 予約開始日時 = new 予約開始日時(new 予約年月日(2020, 5, 23), 予約開始_時._10, 予約_分._00);
            予約終了日時 予約終了日時 = new 予約終了日時(new 予約年月日(2020, 5, 23), 予約終了_時._12, 予約_分._00);

            var reserve = new 予約希望(meetingRoom,
                                   new ReserverId(),
                                   new 予約期間(予約開始日時, 予約終了日時),
                                   new 想定使用人数());

            repository.Save(reserve);

            var reserveList = repository.この日の予約一覧をください(new 予約年月日(2020, 5, 23));

            // TODO: かなりあやしいインターフェースです
            reserveList.かぶってますか(reserve).ShouldBeTrue();
        }
示例#9
0
        public void Aという会議室を_同じ条件で2回予約したら_2回目は予約失敗する()
        {
            var 予約希望 = new 予約希望(new MeetingRoom(MeetingRoomName.A),
                                new ReserverId(),
                                new 予約期間(new 予約開始日時(new 予約年月日(2020, 3, 15), 予約開始_時._14, 予約_分._15),
                                         new 予約終了日時(new 予約年月日(2020, 3, 15), 予約終了_時._16, 予約_分._15)),
                                new 想定使用人数());

            var useCase = new ReservationUseCase(new 予約希望Repository());

            var 予約できた = useCase.予約する(予約希望);

            予約できた.ShouldBeTrue();

            var _2回目の予約希望 = new 予約希望(new MeetingRoom(MeetingRoomName.A),
                                     new ReserverId(),
                                     new 予約期間(new 予約開始日時(new 予約年月日(2020, 3, 15), 予約開始_時._14, 予約_分._15),
                                              new 予約終了日時(new 予約年月日(2020, 3, 15), 予約終了_時._16, 予約_分._15)),
                                     new 想定使用人数());

            var _2回目も予約できた = useCase.予約する(_2回目の予約希望);

            _2回目も予約できた.ShouldBeFalse();
        }
示例#10
0
        public static (QueryTemplate template, QueryParameter parameter) 予約を保存するクエリを生成する(予約希望 予約希望)
        {
            var dapper予約希望 = new ReserveTableRow
            {
                Id            = Guid.NewGuid().ToString(),
                RoomName      = 予約希望.Room.DisplayName,
                StartDateTime = 予約希望.Range.開始日時(),
                EndDateTime   = 予約希望.Range.終了日時()
            };

            return(InsertReserveSql,
                   dapper予約希望);
        }
 public void Save(予約希望 きぼう)
 {
     list.Add(new 予約済み(きぼう.Room, きぼう.ReserverId, きぼう.Range, きぼう.想定使用人数_));
 }