summary |
shortlog | log |
commit |
commitdiff |
tree
first ⋅ prev ⋅ next
Kai Moritz [Mon, 9 Jan 2023 21:49:44 +0000 (22:49 +0100)]
feat: Implemented and tested `MongoDbStorageStrategy`
- Beware: The version 4.0.0 of Spring Data MongoDB that is included in
Spring Boot 3.0.x does not work with version 4.8.1 of the MongoDB drivers
that are included. Therefore, the version of the drivers was downgraded
to 4.7.2 - See:
https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#compatibility.matrix
- Also tried an upgrade of Spring Boot from 3.0.0 to 3.0.1, but without
luck.
- Beware: Spring Boot 3.x does not include an autoconfigured embedded
version of MongoDB for testing. It removed the autoconfiguration for
`de.flapdoodle.embed:de.flapdoodle.embed.mongo` !
Kai Moritz [Mon, 9 Jan 2023 21:46:42 +0000 (22:46 +0100)]
refactor: Refined (simplified) `StorageStrategy`
Kai Moritz [Mon, 9 Jan 2023 21:42:37 +0000 (22:42 +0100)]
refactor: Moved `FilesStorageStrategy` in its own package -- Rename
Kai Moritz [Mon, 9 Jan 2023 21:42:11 +0000 (22:42 +0100)]
refactor: Moved `FilesStorageStrategy` in its own package -- Move
Kai Moritz [Mon, 9 Jan 2023 21:35:40 +0000 (22:35 +0100)]
refactor: `FileStorageStrategy` is not bound to `InMemoryChatRoomService`
Kai Moritz [Mon, 9 Jan 2023 21:23:35 +0000 (22:23 +0100)]
refactor: Moved classes in package `persistence` in sub-packages -- Rename
Kai Moritz [Mon, 9 Jan 2023 21:18:18 +0000 (22:18 +0100)]
refactor: Moved classes in package `persistence` in sub-packages -- Move
Kai Moritz [Mon, 9 Jan 2023 20:37:55 +0000 (21:37 +0100)]
refactor: Introduced `AbstractStorageStrategyIT` as base for more tests
- Moved the test-logic, that does not depend on implementation-details
into an abstract base-class `AbstractStorageStrategyID`.
- `LocalJsonFilesStorageStrategyIT` extends this class and only instances
for that specific implementation and the accompanying setup.
Kai Moritz [Mon, 9 Jan 2023 20:14:35 +0000 (21:14 +0100)]
fix: `ChatBackendApplicationTest` cannot corrupt the real data anymore
- The test used the default storage-direcory.
- Because the app is sometimes aborted during the shutdown, this sometimes
lead to corrupted data in the default storage-directory.
- The test now uses a predefined set of data underneath the build-directory.
- Also changed the name of the according property to `storage-directory`.
Kai Moritz [Mon, 9 Jan 2023 19:51:20 +0000 (20:51 +0100)]
fix: Refined `ChatBackendControllerTest` and fixed a bug in `ChatRoom`
- Only `ChatHomeService` and `ChatRoomService` are mocked.
- This makes the test more robust, because there are less sources for
false positives or wron negatives because of wrongly mocked behaviour.
- Aforementioned is proofed by an unnoticed bug, that was discoverd by
the freshly refined test.
Kai Moritz [Mon, 9 Jan 2023 18:52:05 +0000 (19:52 +0100)]
feat: Moved persistence-logic from `ChatHome` into `ChatHomeService`
- Aligned configuration and tests accordingly.
- Also fixed some camel-case typos.
Kai Moritz [Sun, 8 Jan 2023 20:30:57 +0000 (21:30 +0100)]
refactor: Moved business-logic from `ChatRoomService` into `ChatRoom`
- Some essential business-logic -- the identification of mutated messages --
was buried in `InMemoryChatRoomService`.
- This business-logic was moved into `ChatRoom`, becaus otherwise, it
would have been necessary, to reproduce this logic in each and every
new implementation of `ChatRoomService`, which would have been exhausting
and errorprone.
- This allowed also cleaner code in `InMemoryChatRoomService`, that
can focus on the persistence-logic.
- The implementation of `MessageMutationException` and the look of the
accompanying problem-details hat to be refined accordingly.
Kai Moritz [Sun, 8 Jan 2023 20:13:39 +0000 (21:13 +0100)]
fix: Asserted, that `ChatHome` acts, as expected, if asked for a `ChatRoom`
Kai Moritz [Sun, 8 Jan 2023 15:28:17 +0000 (16:28 +0100)]
refactor: Streamlined the API of the services
- `ChatRoomService` and `ChatHomeService` both return only reactive types.
- The decission stems from the wish, to become reactive all the way from
the client to the technical implementation of the backend-services.
- This faciliates the mapping of the results in `ChatBackendController`.
- The refactoring already simplified lots of code, where a `Flux` has
to derived from the `Stream`, yielding a good feeling about the plan,
that is pursued with this refactoring.
- The refactoring also lead to the decision that `UnknownChatroomException`
realy is a business-logic-exception (that according refactoring was
already performed in the previous commits, to ceap this commit clean).
Kai Moritz [Sun, 8 Jan 2023 15:21:17 +0000 (16:21 +0100)]
refactor: `UnknownChatroomException` is a business-exception - Relocate
Kai Moritz [Sun, 8 Jan 2023 15:20:53 +0000 (16:20 +0100)]
refactor: `UnknownChatroomException` is a business-exception - Move
Kai Moritz [Sun, 8 Jan 2023 18:47:43 +0000 (19:47 +0100)]
fix: Fixed generated problem-details for mutated messages
Kai Moritz [Sun, 8 Jan 2023 16:14:56 +0000 (17:14 +0100)]
feat: Implemented problem-details for `UnknownChatroomException`
- Implemented an `@ExceptionHandler` for `UnknownChatroomException`.
- Implemented `ChatBackendControllerTest`
- Asserted, that the problem-details are generated as expected
- Pinned down problems, that yield a refactoring and have to
be resolved afterwards.
Kai Moritz [Sun, 8 Jan 2023 15:09:30 +0000 (16:09 +0100)]
refactor: Added assertj-reactor for more readability
Kai Moritz [Sun, 8 Jan 2023 11:28:32 +0000 (12:28 +0100)]
test: `LocalJsonFilesStorageStrategyIT` asserts, that the state is restored
Kai Moritz [Sun, 8 Jan 2023 11:02:33 +0000 (12:02 +0100)]
fix: Implemented a test for `MessageTo` and fixed deserialization
Kai Moritz [Sun, 8 Jan 2023 10:14:45 +0000 (11:14 +0100)]
test: Implemented a first IT for `LocalJsonFilesStorageStrategy`
- This first version of the test does not realy test the storing.
- It is only a proof-of-concept for the setup.
Kai Moritz [Sun, 8 Jan 2023 09:57:25 +0000 (10:57 +0100)]
refactor: The `ChatRoom` determines the timestamp of a `Message`
Kai Moritz [Sun, 8 Jan 2023 09:34:09 +0000 (10:34 +0100)]
refactore: Renamed `ChatroomService` to `ChatRoomService` -- Rename
Kai Moritz [Sun, 8 Jan 2023 09:34:02 +0000 (10:34 +0100)]
refactore: Renamed `ChatroomService` to `ChatRoomService` -- Move
Kai Moritz [Sun, 8 Jan 2023 09:20:56 +0000 (10:20 +0100)]
refactore: Renamed `ChatroomTo` to `ChatRoomTo` -- Rename
Kai Moritz [Sun, 8 Jan 2023 09:19:47 +0000 (10:19 +0100)]
refactore: Renamed `Chatroom` to `ChatRoom` -- Rename
Kai Moritz [Sun, 8 Jan 2023 09:17:49 +0000 (10:17 +0100)]
refactore: Renamed `ChatroomFactory` to `ChatHomeService` -- Rename
Kai Moritz [Sun, 8 Jan 2023 09:17:34 +0000 (10:17 +0100)]
refactore: Renamed `ChatroomFactory` to `ChatHomeService` -- Move
Kai Moritz [Sun, 8 Jan 2023 09:10:46 +0000 (10:10 +0100)]
refactore: Renamed `PersistenceStrategy` to `ChatroomService` -- Rename
Kai Moritz [Sun, 8 Jan 2023 09:10:34 +0000 (10:10 +0100)]
refactore: Renamed `PersistenceStrategy` to `ChatroomService` -- Move
Kai Moritz [Sun, 8 Jan 2023 08:53:03 +0000 (09:53 +0100)]
refactor: Only `LocalJsonFileStorageStrategy` restores `Chatroom`s
Kai Moritz [Sat, 7 Jan 2023 23:47:22 +0000 (00:47 +0100)]
feat: Added an endpoint that list all messages of a chatroom
Kai Moritz [Sat, 7 Jan 2023 20:58:27 +0000 (21:58 +0100)]
refactor: `LocalJsonFilesStorageStrategy` is now realy reactive
Kai Moritz [Sat, 7 Jan 2023 01:16:57 +0000 (02:16 +0100)]
fix: The sink is recreated, if it gets canceled
- The sink is automatically cancelled, if the last consumer leaves.
- Turning auto-cancel of, is not an option, because this buffers new
messages, until the buffer overflows, after which new messages are
droped. Hence, if a new subscriber arrives, it would see some old
messages and then, after a gap, current messages.
- Because of that, the sink is now automatically recreated, if the
last subscriber leaves and triggers the automatically cancelation
of the sink.
- The sink can be recreated without conflicts, because all methods,
that may access the sink are synchronized.
Kai Moritz [Sat, 7 Jan 2023 00:41:34 +0000 (01:41 +0100)]
feat: Server sends real Server-Sent-Events
Kai Moritz [Sat, 7 Jan 2023 20:05:30 +0000 (21:05 +0100)]
feat: The size buffer for listeners to a chatroom is configurable
Kai Moritz [Fri, 6 Jan 2023 00:45:58 +0000 (01:45 +0100)]
feat: Allowed the frontend as origin for CORS
Kai Moritz [Fri, 6 Jan 2023 00:33:51 +0000 (01:33 +0100)]
feat: Added a POST-mapping to force the storing of the data
Kai Moritz [Thu, 5 Jan 2023 23:44:44 +0000 (00:44 +0100)]
refactor: Fixed return-types of the controller
- Renamed and moved `ChatroomInfo` to `ChatroomTo`
- Switched return-types from `Chatroom` to `ChatroomTo`
Kai Moritz [Sat, 7 Jan 2023 20:00:50 +0000 (21:00 +0100)]
fix: `Chatroom`s must not share an instance of `PersistanceStrategy`
Kai Moritz [Thu, 5 Jan 2023 15:09:04 +0000 (16:09 +0100)]
feat: The chats are stored as local json-files
Kai Moritz [Sat, 7 Jan 2023 19:29:32 +0000 (20:29 +0100)]
feat: `ChatHome` returns an `Optional` for `getChatroom(UUID)`
Kai Moritz [Thu, 5 Jan 2023 18:18:50 +0000 (19:18 +0100)]
feat: Introduced `ChatHome` that gives multiple `Chatroom`s a home
Kai Moritz [Wed, 28 Dec 2022 18:20:51 +0000 (19:20 +0100)]
refactor: Moved configuration in a separate class and made it more explicit
Kai Moritz [Wed, 28 Dec 2022 17:09:06 +0000 (18:09 +0100)]
refactor: Introduced `ChatroomFactory`
- `ChatBackendController` only has to know of the `ChatroomFactory`.
- `ChatBackendController` does not have to know the `PersistenceStrategy`.
Kai Moritz [Wed, 28 Dec 2022 16:53:46 +0000 (17:53 +0100)]
refactor: Moved persistence-logic into a pluggable strategy
Kai Moritz [Wed, 28 Dec 2022 16:48:01 +0000 (17:48 +0100)]
refactor: A `Message` now explicitly has a `MessageKey`
Kai Moritz [Wed, 28 Dec 2022 16:38:00 +0000 (17:38 +0100)]
refactor: Streamlined API of `Chatroom` - all return-types are reactive
Kai Moritz [Wed, 28 Dec 2022 16:23:30 +0000 (17:23 +0100)]
refactor: Refined field-names of `Message` and `MessageTo`
- Choosed longer and more descriptive field-names for the domain-class
`Message`.
- Choosed short names for the TO-class `MessageTO`, which is serialized as
JSON.
Kai Moritz [Wed, 28 Dec 2022 16:20:53 +0000 (17:20 +0100)]
feat: `Chatroom.getMessages()` is fully paginated (takes first and last)
Kai Moritz [Wed, 28 Dec 2022 16:14:28 +0000 (17:14 +0100)]
refactor: Refined packaging (renamed packages and classes)
Kai Moritz [Wed, 28 Dec 2022 15:58:34 +0000 (16:58 +0100)]
refactor: Refined packaging (moved classes to new folders and files)
Kai Moritz [Wed, 28 Dec 2022 15:55:34 +0000 (16:55 +0100)]
refactor: Renamed artifact to chat-backend
Kai Moritz [Mon, 26 Dec 2022 17:07:57 +0000 (18:07 +0100)]
refactor: Reworked implementation of the problem-details [RFC-7807]
Kai Moritz [Mon, 26 Dec 2022 13:50:51 +0000 (14:50 +0100)]
feat: Added problem-details [RFC-7807] for a message mutation error
Kai Moritz [Mon, 26 Dec 2022 13:03:52 +0000 (14:03 +0100)]
feat: An `IllegalArgumentException` is thrown, if different messages are added for the same `MessageKey`
Kai Moritz [Mon, 26 Dec 2022 12:48:05 +0000 (13:48 +0100)]
feat: Added logging for the `listen`-endpoint
Kai Moritz [Mon, 26 Dec 2022 12:46:53 +0000 (13:46 +0100)]
fix: fixed the return-type of the `listen`-endpoint
Kai Moritz [Sun, 25 Dec 2022 22:02:47 +0000 (23:02 +0100)]
feat: Implemented an endpoint to get the details of a chatroom
Kai Moritz [Wed, 21 Dec 2022 17:57:23 +0000 (18:57 +0100)]
feat: implemented a listen-method for the chat-service based on a Flux
- Switched the return-type of `Chatroom.addMessage()` to `Mono<Message>`.
- Added an inner method, that "persists" the message and also returns
`Mono<Message>`.
- `addMessage()` calls `persistMessage()`, peeks into the subscription and
emits the `Message` to an internal `Sink.multy()` of the `Chatroom`.
- `Chatroom.listen()` creates a `Flux` from the internal Sink, so that
multiple subscribers can listen on the sink and all retrieve the current
messages in parallel.
Kai Moritz [Tue, 20 Dec 2022 21:25:42 +0000 (22:25 +0100)]
feat: implemented a simplified chatroom-service
Kai Moritz [Tue, 20 Dec 2022 17:27:11 +0000 (18:27 +0100)]
chore: Switched configuration from *.properties to YAML
Kai Moritz [Tue, 20 Dec 2022 17:26:15 +0000 (18:26 +0100)]
refactor: Simplified the name of the application-class
Kai Moritz [Sun, 15 Jan 2023 18:31:18 +0000 (19:31 +0100)]
chore: Fixed indentation of the `pom.xml`
Kai Moritz [Tue, 20 Dec 2022 17:18:45 +0000 (18:18 +0100)]
chore: Removed the Maven-Wrapper
Kai Moritz [Tue, 20 Dec 2022 17:17:49 +0000 (18:17 +0100)]
feat: Generated empty Spring Boot 3.0.0 App