├── .README └── todoapp.png ├── .env ├── .gitignore ├── CLAUDE.md ├── Dockerfile ├── LICENSE.md ├── README.md ├── client ├── .gitignore ├── README.md ├── index.html ├── main.js ├── package-lock.json ├── package.json ├── pages │ ├── error.html │ ├── login.html │ └── todos.html ├── public │ ├── favicon.ico │ └── profile-picture.png ├── src │ ├── application │ │ ├── feature-toggles-service.js │ │ ├── todo-service.js │ │ └── user-service.js │ └── ui │ │ ├── error │ │ ├── app.css │ │ └── app.js │ │ ├── feature-toggles.js │ │ ├── login │ │ ├── app.css │ │ └── app.js │ │ └── todos │ │ ├── app.css │ │ ├── app.js │ │ ├── component.js │ │ ├── controller.js │ │ ├── todos.js │ │ ├── user-count.js │ │ └── user-session.js ├── style.css ├── tests │ ├── application │ │ └── todo-service.test.js │ └── ui │ │ └── todos │ │ └── user-session.test.js └── vite.config.js ├── contract ├── README.md └── openapi │ ├── index.html │ ├── serve.bat │ ├── serve.sh │ └── todoapp-api.yaml ├── docker-compose.yml └── server ├── .README └── todoapp-architecture.png ├── .gitignore ├── README.md ├── build.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle └── src ├── main ├── java │ └── todoapp │ │ ├── TodoApplication.java │ │ ├── core │ │ ├── foundation │ │ │ ├── Constant.java │ │ │ ├── NotImplementedException.java │ │ │ ├── SystemException.java │ │ │ ├── crypto │ │ │ │ ├── PasswordEncoder.java │ │ │ │ └── support │ │ │ │ │ ├── NoOpPasswordEncoder.java │ │ │ │ │ └── SimplePasswordEncoder.java │ │ │ └── util │ │ │ │ ├── DigestUtils.java │ │ │ │ └── StreamUtils.java │ │ ├── shared │ │ │ ├── identifier │ │ │ │ ├── TodoId.java │ │ │ │ └── UserId.java │ │ │ └── util │ │ │ │ └── Spreadsheet.java │ │ ├── todo │ │ │ ├── application │ │ │ │ ├── AddPersonalTodo.java │ │ │ │ ├── AddTodo.java │ │ │ │ ├── DefaultTodoManager.java │ │ │ │ ├── FindPersonalTodos.java │ │ │ │ ├── FindTodos.java │ │ │ │ ├── ModifyPersonalTodo.java │ │ │ │ ├── ModifyTodo.java │ │ │ │ ├── RemovePersonalTodo.java │ │ │ │ └── RemoveTodo.java │ │ │ └── domain │ │ │ │ ├── Todo.java │ │ │ │ ├── TodoException.java │ │ │ │ ├── TodoIdGenerator.java │ │ │ │ ├── TodoNotFoundException.java │ │ │ │ ├── TodoOwnerMismatchException.java │ │ │ │ ├── TodoRegistrationRejectedException.java │ │ │ │ ├── TodoRepository.java │ │ │ │ ├── TodoState.java │ │ │ │ └── support │ │ │ │ ├── SpreadsheetConverter.java │ │ │ │ └── UUIDBasedTodoIdGenerator.java │ │ └── user │ │ │ ├── application │ │ │ ├── ChangeUserProfilePicture.java │ │ │ ├── DefaultUserService.java │ │ │ ├── RegisterUser.java │ │ │ └── VerifyUserPassword.java │ │ │ └── domain │ │ │ ├── ProfilePicture.java │ │ │ ├── ProfilePictureException.java │ │ │ ├── ProfilePictureStorage.java │ │ │ ├── User.java │ │ │ ├── UserException.java │ │ │ ├── UserIdGenerator.java │ │ │ ├── UserNotFoundException.java │ │ │ ├── UserPasswordNotMatchedException.java │ │ │ ├── UserRepository.java │ │ │ └── support │ │ │ └── UUIDBasedUserIdGenerator.java │ │ ├── data │ │ ├── InMemoryTodoRepository.java │ │ ├── InMemoryUserRepository.java │ │ ├── LocalProfilePictureStorage.java │ │ ├── TodosDataInitializer.java │ │ └── jpa │ │ │ ├── JpaTodoRepository.java │ │ │ └── JpaUserRepository.java │ │ ├── security │ │ ├── AccessDeniedException.java │ │ ├── UnauthorizedAccessException.java │ │ ├── UserSession.java │ │ ├── UserSessionHolder.java │ │ ├── support │ │ │ └── RolesAllowedSupport.java │ │ └── web │ │ │ └── servlet │ │ │ ├── HttpUserSessionHolder.java │ │ │ ├── RolesVerifyHandlerInterceptor.java │ │ │ └── UserSessionFilter.java │ │ └── web │ │ ├── FeatureTogglesRestController.java │ │ ├── LoginController.java │ │ ├── OnlineUsersCounterController.java │ │ ├── TodoController.java │ │ ├── TodoRestController.java │ │ ├── UserController.java │ │ ├── UserRestController.java │ │ ├── config │ │ ├── GlobalControllerAdvice.java │ │ ├── WebMvcConfiguration.java │ │ └── json │ │ │ ├── TodoModule.java │ │ │ └── UserModule.java │ │ ├── model │ │ ├── FeatureTogglesProperties.java │ │ ├── SiteProperties.java │ │ └── UserProfile.java │ │ └── support │ │ ├── ConnectedClientCountBroadcaster.java │ │ ├── context │ │ └── ExceptionMessageTranslator.java │ │ ├── method │ │ ├── ProfilePictureReturnValueHandler.java │ │ └── UserSessionHandlerMethodArgumentResolver.java │ │ └── servlet │ │ ├── error │ │ └── ReadableErrorAttributes.java │ │ ├── handler │ │ ├── ExecutionTimeHandlerInterceptor.java │ │ └── LoggingHandlerInterceptor.java │ │ └── view │ │ ├── CommaSeparatedValuesView.java │ │ └── SimpleMappingViewResolver.java └── resources │ ├── application-default.yaml │ ├── application.yaml │ ├── messages.properties │ ├── messages_en.properties │ └── messages_ko.properties └── test └── java └── todoapp ├── TodoApplicationTests.java ├── core └── todo │ └── TodoFixture.java ├── data ├── InMemoryTodoRepositoryTest.java └── InMemoryUserRepositoryTest.java ├── security ├── UserSessionTest.java └── web │ └── servlet │ └── HttpUserSessionHolderTest.java └── web ├── FeatureTogglesRestControllerTest.java ├── TodoControllerTest.java └── TodoRestControllerTest.java /.README/todoapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/.README/todoapp.png -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/.env -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/.gitignore -------------------------------------------------------------------------------- /CLAUDE.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/CLAUDE.md -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/Dockerfile -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/LICENSE.md -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/README.md -------------------------------------------------------------------------------- /client/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/.gitignore -------------------------------------------------------------------------------- /client/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/README.md -------------------------------------------------------------------------------- /client/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/index.html -------------------------------------------------------------------------------- /client/main.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/main.js -------------------------------------------------------------------------------- /client/package-lock.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/package-lock.json -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/package.json -------------------------------------------------------------------------------- /client/pages/error.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/pages/error.html -------------------------------------------------------------------------------- /client/pages/login.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/pages/login.html -------------------------------------------------------------------------------- /client/pages/todos.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/pages/todos.html -------------------------------------------------------------------------------- /client/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/public/favicon.ico -------------------------------------------------------------------------------- /client/public/profile-picture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/public/profile-picture.png -------------------------------------------------------------------------------- /client/src/application/feature-toggles-service.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/src/application/feature-toggles-service.js -------------------------------------------------------------------------------- /client/src/application/todo-service.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/src/application/todo-service.js -------------------------------------------------------------------------------- /client/src/application/user-service.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/src/application/user-service.js -------------------------------------------------------------------------------- /client/src/ui/error/app.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/src/ui/error/app.css -------------------------------------------------------------------------------- /client/src/ui/error/app.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/src/ui/error/app.js -------------------------------------------------------------------------------- /client/src/ui/feature-toggles.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/src/ui/feature-toggles.js -------------------------------------------------------------------------------- /client/src/ui/login/app.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/src/ui/login/app.css -------------------------------------------------------------------------------- /client/src/ui/login/app.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/src/ui/login/app.js -------------------------------------------------------------------------------- /client/src/ui/todos/app.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/src/ui/todos/app.css -------------------------------------------------------------------------------- /client/src/ui/todos/app.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/src/ui/todos/app.js -------------------------------------------------------------------------------- /client/src/ui/todos/component.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/src/ui/todos/component.js -------------------------------------------------------------------------------- /client/src/ui/todos/controller.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/src/ui/todos/controller.js -------------------------------------------------------------------------------- /client/src/ui/todos/todos.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/src/ui/todos/todos.js -------------------------------------------------------------------------------- /client/src/ui/todos/user-count.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/src/ui/todos/user-count.js -------------------------------------------------------------------------------- /client/src/ui/todos/user-session.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/src/ui/todos/user-session.js -------------------------------------------------------------------------------- /client/style.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/style.css -------------------------------------------------------------------------------- /client/tests/application/todo-service.test.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/tests/application/todo-service.test.js -------------------------------------------------------------------------------- /client/tests/ui/todos/user-session.test.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/tests/ui/todos/user-session.test.js -------------------------------------------------------------------------------- /client/vite.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/client/vite.config.js -------------------------------------------------------------------------------- /contract/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/contract/README.md -------------------------------------------------------------------------------- /contract/openapi/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/contract/openapi/index.html -------------------------------------------------------------------------------- /contract/openapi/serve.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/contract/openapi/serve.bat -------------------------------------------------------------------------------- /contract/openapi/serve.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/contract/openapi/serve.sh -------------------------------------------------------------------------------- /contract/openapi/todoapp-api.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/contract/openapi/todoapp-api.yaml -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/docker-compose.yml -------------------------------------------------------------------------------- /server/.README/todoapp-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/.README/todoapp-architecture.png -------------------------------------------------------------------------------- /server/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/.gitignore -------------------------------------------------------------------------------- /server/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/README.md -------------------------------------------------------------------------------- /server/build.gradle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/build.gradle -------------------------------------------------------------------------------- /server/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /server/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/gradle/wrapper/gradle-wrapper.properties -------------------------------------------------------------------------------- /server/gradlew: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/gradlew -------------------------------------------------------------------------------- /server/gradlew.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/gradlew.bat -------------------------------------------------------------------------------- /server/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'todoapp' 2 | -------------------------------------------------------------------------------- /server/src/main/java/todoapp/TodoApplication.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/TodoApplication.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/foundation/Constant.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/foundation/Constant.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/foundation/NotImplementedException.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/foundation/NotImplementedException.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/foundation/SystemException.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/foundation/SystemException.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/foundation/crypto/PasswordEncoder.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/foundation/crypto/PasswordEncoder.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/foundation/crypto/support/NoOpPasswordEncoder.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/foundation/crypto/support/NoOpPasswordEncoder.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/foundation/crypto/support/SimplePasswordEncoder.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/foundation/crypto/support/SimplePasswordEncoder.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/foundation/util/DigestUtils.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/foundation/util/DigestUtils.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/foundation/util/StreamUtils.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/foundation/util/StreamUtils.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/shared/identifier/TodoId.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/shared/identifier/TodoId.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/shared/identifier/UserId.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/shared/identifier/UserId.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/shared/util/Spreadsheet.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/shared/util/Spreadsheet.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/todo/application/AddPersonalTodo.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/todo/application/AddPersonalTodo.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/todo/application/AddTodo.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/todo/application/AddTodo.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/todo/application/DefaultTodoManager.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/todo/application/DefaultTodoManager.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/todo/application/FindPersonalTodos.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/todo/application/FindPersonalTodos.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/todo/application/FindTodos.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/todo/application/FindTodos.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/todo/application/ModifyPersonalTodo.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/todo/application/ModifyPersonalTodo.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/todo/application/ModifyTodo.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/todo/application/ModifyTodo.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/todo/application/RemovePersonalTodo.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/todo/application/RemovePersonalTodo.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/todo/application/RemoveTodo.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/todo/application/RemoveTodo.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/todo/domain/Todo.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/todo/domain/Todo.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/todo/domain/TodoException.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/todo/domain/TodoException.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/todo/domain/TodoIdGenerator.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/todo/domain/TodoIdGenerator.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/todo/domain/TodoNotFoundException.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/todo/domain/TodoNotFoundException.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/todo/domain/TodoOwnerMismatchException.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/todo/domain/TodoOwnerMismatchException.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/todo/domain/TodoRegistrationRejectedException.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/todo/domain/TodoRegistrationRejectedException.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/todo/domain/TodoRepository.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/todo/domain/TodoRepository.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/todo/domain/TodoState.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/todo/domain/TodoState.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/todo/domain/support/SpreadsheetConverter.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/todo/domain/support/SpreadsheetConverter.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/todo/domain/support/UUIDBasedTodoIdGenerator.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/todo/domain/support/UUIDBasedTodoIdGenerator.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/user/application/ChangeUserProfilePicture.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/user/application/ChangeUserProfilePicture.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/user/application/DefaultUserService.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/user/application/DefaultUserService.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/user/application/RegisterUser.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/user/application/RegisterUser.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/user/application/VerifyUserPassword.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/user/application/VerifyUserPassword.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/user/domain/ProfilePicture.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/user/domain/ProfilePicture.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/user/domain/ProfilePictureException.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/user/domain/ProfilePictureException.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/user/domain/ProfilePictureStorage.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/user/domain/ProfilePictureStorage.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/user/domain/User.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/user/domain/User.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/user/domain/UserException.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/user/domain/UserException.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/user/domain/UserIdGenerator.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/user/domain/UserIdGenerator.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/user/domain/UserNotFoundException.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/user/domain/UserNotFoundException.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/user/domain/UserPasswordNotMatchedException.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/user/domain/UserPasswordNotMatchedException.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/user/domain/UserRepository.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/user/domain/UserRepository.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/core/user/domain/support/UUIDBasedUserIdGenerator.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/core/user/domain/support/UUIDBasedUserIdGenerator.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/data/InMemoryTodoRepository.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/data/InMemoryTodoRepository.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/data/InMemoryUserRepository.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/data/InMemoryUserRepository.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/data/LocalProfilePictureStorage.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/data/LocalProfilePictureStorage.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/data/TodosDataInitializer.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/data/TodosDataInitializer.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/data/jpa/JpaTodoRepository.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/data/jpa/JpaTodoRepository.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/data/jpa/JpaUserRepository.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/data/jpa/JpaUserRepository.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/security/AccessDeniedException.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/security/AccessDeniedException.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/security/UnauthorizedAccessException.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/security/UnauthorizedAccessException.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/security/UserSession.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/security/UserSession.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/security/UserSessionHolder.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/security/UserSessionHolder.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/security/support/RolesAllowedSupport.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/security/support/RolesAllowedSupport.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/security/web/servlet/HttpUserSessionHolder.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/security/web/servlet/HttpUserSessionHolder.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/security/web/servlet/RolesVerifyHandlerInterceptor.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/security/web/servlet/RolesVerifyHandlerInterceptor.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/security/web/servlet/UserSessionFilter.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/security/web/servlet/UserSessionFilter.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/FeatureTogglesRestController.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/FeatureTogglesRestController.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/LoginController.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/LoginController.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/OnlineUsersCounterController.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/OnlineUsersCounterController.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/TodoController.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/TodoController.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/TodoRestController.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/TodoRestController.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/UserController.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/UserController.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/UserRestController.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/UserRestController.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/config/GlobalControllerAdvice.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/config/GlobalControllerAdvice.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/config/WebMvcConfiguration.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/config/WebMvcConfiguration.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/config/json/TodoModule.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/config/json/TodoModule.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/config/json/UserModule.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/config/json/UserModule.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/model/FeatureTogglesProperties.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/model/FeatureTogglesProperties.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/model/SiteProperties.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/model/SiteProperties.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/model/UserProfile.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/model/UserProfile.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/support/ConnectedClientCountBroadcaster.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/support/ConnectedClientCountBroadcaster.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/support/context/ExceptionMessageTranslator.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/support/context/ExceptionMessageTranslator.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/support/method/ProfilePictureReturnValueHandler.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/support/method/ProfilePictureReturnValueHandler.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/support/method/UserSessionHandlerMethodArgumentResolver.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/support/method/UserSessionHandlerMethodArgumentResolver.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/support/servlet/error/ReadableErrorAttributes.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/support/servlet/error/ReadableErrorAttributes.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/support/servlet/handler/ExecutionTimeHandlerInterceptor.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/support/servlet/handler/ExecutionTimeHandlerInterceptor.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/support/servlet/handler/LoggingHandlerInterceptor.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/support/servlet/handler/LoggingHandlerInterceptor.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/support/servlet/view/CommaSeparatedValuesView.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/support/servlet/view/CommaSeparatedValuesView.java -------------------------------------------------------------------------------- /server/src/main/java/todoapp/web/support/servlet/view/SimpleMappingViewResolver.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/java/todoapp/web/support/servlet/view/SimpleMappingViewResolver.java -------------------------------------------------------------------------------- /server/src/main/resources/application-default.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/resources/application-default.yaml -------------------------------------------------------------------------------- /server/src/main/resources/application.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/resources/application.yaml -------------------------------------------------------------------------------- /server/src/main/resources/messages.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/resources/messages.properties -------------------------------------------------------------------------------- /server/src/main/resources/messages_en.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/resources/messages_en.properties -------------------------------------------------------------------------------- /server/src/main/resources/messages_ko.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/main/resources/messages_ko.properties -------------------------------------------------------------------------------- /server/src/test/java/todoapp/TodoApplicationTests.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/test/java/todoapp/TodoApplicationTests.java -------------------------------------------------------------------------------- /server/src/test/java/todoapp/core/todo/TodoFixture.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/test/java/todoapp/core/todo/TodoFixture.java -------------------------------------------------------------------------------- /server/src/test/java/todoapp/data/InMemoryTodoRepositoryTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/test/java/todoapp/data/InMemoryTodoRepositoryTest.java -------------------------------------------------------------------------------- /server/src/test/java/todoapp/data/InMemoryUserRepositoryTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/test/java/todoapp/data/InMemoryUserRepositoryTest.java -------------------------------------------------------------------------------- /server/src/test/java/todoapp/security/UserSessionTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/test/java/todoapp/security/UserSessionTest.java -------------------------------------------------------------------------------- /server/src/test/java/todoapp/security/web/servlet/HttpUserSessionHolderTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/test/java/todoapp/security/web/servlet/HttpUserSessionHolderTest.java -------------------------------------------------------------------------------- /server/src/test/java/todoapp/web/FeatureTogglesRestControllerTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/test/java/todoapp/web/FeatureTogglesRestControllerTest.java -------------------------------------------------------------------------------- /server/src/test/java/todoapp/web/TodoControllerTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/test/java/todoapp/web/TodoControllerTest.java -------------------------------------------------------------------------------- /server/src/test/java/todoapp/web/TodoRestControllerTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springrunner/mastering-spring-web-101/HEAD/server/src/test/java/todoapp/web/TodoRestControllerTest.java --------------------------------------------------------------------------------