{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":723342221,"defaultBranch":"main","name":"dynamodb-app","ownerLogin":"streamlined2","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2023-11-25T11:11:51.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/64580046?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1701516590.0","currentOid":""},"activityList":{"items":[{"before":"db80f0efe170520b271b3e3e9fcbed18be272f6a","after":"b6371659e2e3fe3b672ead9b53b9728d2a6dae34","ref":"refs/heads/main","pushedAt":"2023-12-16T00:30:46.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Extracted result list class hierarchy from DynamoDBUserServiceImpl.\n\n1. Entity-specific constants like TABLE_PARTITION_KEY moved into entity\nclasses Chat, Message, User;\n2. Extracted class hierarchy representing entity result list\nAbstractResultList, NonFilteredResultList, FilteredResultList,\nValueFilteredResultList, RangeFilteredResultList from service classes\nGenericDynamoDBServiceImpl, DynamoDBChatServiceImpl,\nDynamoDBMessageServiceImpl, DynamoDBUserServiceImpl.","shortMessageHtmlLink":"Extracted result list class hierarchy from DynamoDBUserServiceImpl."}},{"before":"6fae94749872cf969428ce37c3e6ae35eebb459d","after":"db80f0efe170520b271b3e3e9fcbed18be272f6a","ref":"refs/heads/main","pushedAt":"2023-12-13T23:38:16.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Reducing code duplication in DynamoDBUserServiceImpl class.","shortMessageHtmlLink":"Reducing code duplication in DynamoDBUserServiceImpl class."}},{"before":"8f61b0043c1ca37ec3a8a992aa6f5e9805e8dbe7","after":"6fae94749872cf969428ce37c3e6ae35eebb459d","ref":"refs/heads/main","pushedAt":"2023-12-12T17:18:45.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Entity to DTO conversion moved closer to obtaining query results.\n\n1. Added DTO type parameter to GenericDynamoDBServiceImpl,\nDynamoDBMessageServiceImpl, DynamoDBChatServiceImpl classes;\n2. Service methods of DynamoDBUserServiceImpl,\nGenericDynamoDBServiceImpl classes convert entities to DTOs and return\nlist of DTOs.","shortMessageHtmlLink":"Entity to DTO conversion moved closer to obtaining query results."}},{"before":"7d2361194166131e7e59b45e3a476a5c1d38b5e9","after":"8f61b0043c1ca37ec3a8a992aa6f5e9805e8dbe7","ref":"refs/heads/main","pushedAt":"2023-12-10T19:32:17.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Added DTOs for entity classes, changed data service method signatures.\n\n1. Added interfaces Dto for DTO classes, Entity for entity classes;\n2. Added DTO classes ChatDto, MessageDto, UserDto that implement\ninterface Dto;\n3. Entity classes User, Chat, Message implement interface Entity;\n4. Entity types replaced with DTO types in method signatures of\ninterfaces ChatService, MessageService, UserService and classes\nDynamoDBChatServiceImpl, DynamoDBMessageServiceImpl,\nDynamoDBUserServiceImpl;\n5. References to entity classes replaced with DTO classes in lambda\nfunction classes GenericChatFunction, CreateChatFunction,\nGetChatFunction, GetChatListFunction, UpdateChatFunction,\nGenericFunction, GenericUserFunction, CreateUserFunction,\nGetUserFunction, GetUserListFunction, GetUserListByQueryFunction,\nUpdateUserFunction.","shortMessageHtmlLink":"Added DTOs for entity classes, changed data service method signatures."}},{"before":"bc53ca50de377c87cda33c3bd1b034fd52835f0c","after":"7d2361194166131e7e59b45e3a476a5c1d38b5e9","ref":"refs/heads/main","pushedAt":"2023-12-10T01:16:31.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Added class ListParameters to hold hash key, range key, limit.\n\n1. Added class ListParameters to hold parameters of selected sublist and\nrelated methods;\n2. Methods of interfaces UserService, MessageService, ChatService,\nclasses DynamoDBUserServiceImpl, DynamoDBMessageServiceImpl,\nDynamoDBChatServiceImpl operate with ListParameters parameter;\n3. Added conversion method 'toListParameters' to class GenericFunction;\nclasses GetChatListFunction, GetUserListByQueryFunction,\nGetUserListFunction use this method to create parameter;\n4. Method signatures of classes GenericDynamoDBServiceImpl changed to\ninclude ListParameter parameter instead of hash key, range key, and\nlimit parameters;\n5. Removed utility class Checks.","shortMessageHtmlLink":"Added class ListParameters to hold hash key, range key, limit."}},{"before":"a70b12eedeb1d22675c52592bd7ddb8d60531ce6","after":"bc53ca50de377c87cda33c3bd1b034fd52835f0c","ref":"refs/heads/main","pushedAt":"2023-12-09T23:11:41.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Extracted user data from RequestBody class.\n\n1. RequestBody class moved into front-end package handler.user;\n2. User data extracted from RequestBody into separate UserData class;\n3. Added conversion methods toUserData/toRequestBody to class\nGenericUserFunction;\n4. Method 'getUserListByQuery' of interface UserService and class\nDynamoDBUserServiceImpl accepts parameter of type UserData;\n5. GetUserListByQueryFunction converts instance of RequestBody to\nUserData.","shortMessageHtmlLink":"Extracted user data from RequestBody class."}},{"before":"80c8a2ebc0d8590a6719da991731488d2e142aaa","after":"a70b12eedeb1d22675c52592bd7ddb8d60531ce6","ref":"refs/heads/main","pushedAt":"2023-12-09T21:52:40.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Fixed wrong status code OK when DynamoDBException thrown.\n\n1. Fixed wrong status code OK error when DynamoDBException thrown within\nlambda function, then caught and suppressed;\n2. GenericFunction made generic to convert arbitrary entity type to\nstring and vice versa;\n3. Methods for validation checks of user request parameters like age,\nname, location moved to RequestBody class;\n4. Added enum class SortingOrder to represent sorting order parameter of\nRequestBody class;\n5. Method 'getUserListByQuery' of class DynamoDBUserServiceImpl calls\nvalidation checks of RequestBody class.","shortMessageHtmlLink":"Fixed wrong status code OK when DynamoDBException thrown."}},{"before":"0cb8dfa06e59153a744524b520e46375e3ddeec8","after":"80c8a2ebc0d8590a6719da991731488d2e142aaa","ref":"refs/heads/main","pushedAt":"2023-12-05T11:53:34.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Updated dependency versions in pom.xml","shortMessageHtmlLink":"Updated dependency versions in pom.xml"}},{"before":"5bc36821061b06c414e7de1d14afae084588f1fc","after":"0cb8dfa06e59153a744524b520e46375e3ddeec8","ref":"refs/heads/main","pushedAt":"2023-12-05T00:06:39.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Optional request parameters wrapped in Optional.\n\n1. Range key, last key and limit parameters wrapped in Optional in\nChatService, MessageService, UserService interfaces and service classes\nDynamoDBChatServiceImpl, DynamoDBMessageServiceImpl,\nDynamoDBUserServiceImpl, GenericDynamoDBServiceImpl;\n2. Methods extractLimit, extractHashKey, extractRangeKey of class\nGenericFunction return Optional result;\n3. Related methods of classes Checks, Utils operate with Optional\nparameters.","shortMessageHtmlLink":"Optional request parameters wrapped in Optional."}},{"before":"ea91b4b5fab450f9c03de709b4615a40aad7e816","after":"5bc36821061b06c414e7de1d14afae084588f1fc","ref":"refs/heads/main","pushedAt":"2023-12-04T00:26:36.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Clean code refactorings to eliminate returning null.\n\n1. Method getTableStartKeyMap inlined within method\ngetPaginatedNotFilteredEntityList of class GenericDynamoDBServiceImpl;\n2. Methods getIndexStringStartKeyMap, getIndexNumericStartKeyMap inlined\nwithin methods getPaginatedFilteredUserList,\ngetExpressionForPaginatedFilteredUserList of class\nDynamoDBUserServiceImpl.","shortMessageHtmlLink":"Clean code refactorings to eliminate returning null."}},{"before":"deea5313a36d7f34b17968a447f340991b109b2a","after":"ea91b4b5fab450f9c03de709b4615a40aad7e816","ref":"refs/heads/main","pushedAt":"2023-12-03T22:55:06.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Reduced code duplication in class DynamoDBUserServiceImpl.\n\n1. Extracted methods getExpressionForNonPaginatedFilteredUserList,\ngetExpressionForPaginatedFilteredUserList to reduce code duplication in\nclass DynamoDBUserServiceImpl.","shortMessageHtmlLink":"Reduced code duplication in class DynamoDBUserServiceImpl."}},{"before":"e171652571a6e56ec010e15e0266b90a9d7e438c","after":"deea5313a36d7f34b17968a447f340991b109b2a","ref":"refs/heads/main","pushedAt":"2023-12-03T21:49:59.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Application built and deployed via SAM CLI","shortMessageHtmlLink":"Application built and deployed via SAM CLI"}},{"before":"4937f90fdf34fca6df272557e64c85cc322f7978","after":"deea5313a36d7f34b17968a447f340991b109b2a","ref":"refs/heads/chat","pushedAt":"2023-12-03T21:47:22.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Application built and deployed via SAM CLI","shortMessageHtmlLink":"Application built and deployed via SAM CLI"}},{"before":"f22cf638ba1ae1cd20da765748526c37754ebdf5","after":"4937f90fdf34fca6df272557e64c85cc322f7978","ref":"refs/heads/chat","pushedAt":"2023-12-03T13:18:41.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Added interface and implementation class for Message service.\n\n1. Removed unused 'privacy' field from User entity; type of\n'socialMedia' field converted to Set; removed inappropriate\n@DynamoDBAutoGeneratedKey annotation for 'email' field;\n2. Added interface MessageService and implementation class\nDynamoDBMessageServiceImpl for service layer of Message entity;\n3. Message entity uses autogenerated surrogate hash key;\n4. Added scripts for table creation.","shortMessageHtmlLink":"Added interface and implementation class for Message service."}},{"before":"2b4c7bd078a370b4acfa9919dd47ddd8057ae3c7","after":"f22cf638ba1ae1cd20da765748526c37754ebdf5","ref":"refs/heads/chat","pushedAt":"2023-12-02T14:26:26.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Extracted generic base class GenericDynamoDBServiceImpl.\n\n1. Extracted abstract class GenericDynamoDBServiceImpl which serves as\ngeneric base class for entity service classes DynamoDBUserServiceImpl,\nDynamoDBChatServiceImpl; common data and functionality moved from\nDynamoDBUserServiceImpl to GenericDynamoDBServiceImpl;\n2. Implemented methods of class DynamoDBChatServiceImpl.","shortMessageHtmlLink":"Extracted generic base class GenericDynamoDBServiceImpl."}},{"before":null,"after":"2b4c7bd078a370b4acfa9919dd47ddd8057ae3c7","ref":"refs/heads/chat","pushedAt":"2023-12-02T11:29:50.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Added model, lambda function classes for chat\n\n1. Added model classes Chat, Message;\n2. Added chat service interface ChatService and class stub\nDynamoDBChatServiceImpl;\n3. Extracted abstract class of lambda function for any model entity\nGenericFunction;\n4. Added abstract lambda function class for user GenericUserFunction;\n5. Added lambda function classes for chat: GenericChatFunction,\nCreateChatFunction, UpdateChatFunction, DeleteChatFunction,\nGetChatFunction, GetChatListFunction;\n6. Added user table schema description;\n7. Added user list request guide.","shortMessageHtmlLink":"Added model, lambda function classes for chat"}},{"before":"0f82bf1feddb2db2209d41053ecd8963ca2b2b72","after":"e171652571a6e56ec010e15e0266b90a9d7e438c","ref":"refs/heads/main","pushedAt":"2023-11-27T15:24:55.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Changed parameter and result types of DynamoDBService\n\n1. Parameter and result types of interface DynamoDBService and class\nDynamoDBServiceImpl replaced with domain-specific types to decouple data\nservice layer from front-end layer;\n2. Added DynamoDBException class for data service exceptions;\n3. Methods of class Checks operate with parameters wrapped in Optional;\n4. Method 'getIntegerValue' returns Integer result wrapped in Optional;\n5. Classes derived from base class GenericUserFunction prepare\nparameters for DynamoDBService and convert results to JSON response;\n6. Gson object and conversion methods moved from class\nDynamoDBServiceImpl to class GenericUserFunction.","shortMessageHtmlLink":"Changed parameter and result types of DynamoDBService"}},{"before":"5fb64196e720f7ff2dbf8986c682d5057bf3e65e","after":"0f82bf1feddb2db2209d41053ecd8963ca2b2b72","ref":"refs/heads/main","pushedAt":"2023-11-27T08:21:13.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Service class DynamoDBServiceImpl and its utility classes get refactored\n\n1. Added field Gson gson in class DynamoDBServiceImpl; an threadsafe\ninstance created once and used by consequent method calls;\n2. Class AmazonDynamoDBConnect inlined in class DynamoDBServiceImpl;\nadded field DynamoDBMapper dynamoDBMapper in class DynamoDBServiceImpl;\n3. Error messages of service class DynamoDBServiceImpl include extra\ndetails like user email, list of incorrect social media to make them\nclear;\n4. Unused instance of User never created in methods 'findUser',\n'deleteUser';\n5. Utility classes DynamoDBServiceChecks, DynamoDBServiceUtils renamed\nto Checks, Utils respectively;\n6. Added method 'getIncorrectSocialMedia' in class Checks to collect\nwrong social media;\n7. Method 'getOptionalIntegerValue' replaced with\n'getLongValueOrDefault' in class Utils.","shortMessageHtmlLink":"Service class DynamoDBServiceImpl and its utility classes get refactored"}},{"before":"b58c119afa9c88cc86f1b9ca0baa3024aeda0261","after":"5fb64196e720f7ff2dbf8986c682d5057bf3e65e","ref":"refs/heads/main","pushedAt":"2023-11-25T18:52:12.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Refactoring of DynamoDBServiceImpl class\n\n1. 'else' clauses removed, sentinel statements introduced to simplify\ncode;\n2. Checks extracted to utility class DynamoDBServiceChecks;\n3. Utility methods extracted to utility class DynamoDBServiceUtils;\n4. Implemented thread safe singleton DynamoDBMapper.","shortMessageHtmlLink":"Refactoring of DynamoDBServiceImpl class"}},{"before":"ff3f073b372eada9e22816f4919ce3eb6459a66f","after":"b58c119afa9c88cc86f1b9ca0baa3024aeda0261","ref":"refs/heads/main","pushedAt":"2023-11-25T15:41:00.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Minor refactorings in layer.service package","shortMessageHtmlLink":"Minor refactorings in layer.service package"}},{"before":"61fc348246711ccfe816659dae28103af4c2761c","after":"ff3f073b372eada9e22816f4919ce3eb6459a66f","ref":"refs/heads/main","pushedAt":"2023-11-25T15:09:35.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Model classes refactored\n\n1. Model classes ResponseMessage, RequestBody do not implement\nunnecessary interface Serializable; marked with @Data annotation;\nbuilder used to construct instances;\n2. Methods 'equals'/'hashCode' implemented with 'email' field of User\nclass;\n3. Removed non-used method 'updateUsersNotNullAttributes' of\nDynamoDBServiceImpl class.","shortMessageHtmlLink":"Model classes refactored"}},{"before":"39eb94d62c871ad264e2904c54f9e6f2b2df6e4a","after":"61fc348246711ccfe816659dae28103af4c2761c","ref":"refs/heads/main","pushedAt":"2023-11-25T13:46:23.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"DynamoDBService, APIGatewayService implemented as threadsafe singletons\n\n1. Instances of DynamoDBService, APIGatewayService implemented as\nthreadsafe singletons in base class GenericFunction; added accessors\n'getAPIGatewayService', 'getDynamoDBService'; fields 'dynamoDBService',\n'apiGatewayService' removed;\n2. References to 'dynamoDBService', 'apiGatewayService' replaced with\ncalls of respective access methods.","shortMessageHtmlLink":"DynamoDBService, APIGatewayService implemented as threadsafe singletons"}},{"before":"979d3fab991d644bc1f0ee932b49a059d43f35b7","after":"39eb94d62c871ad264e2904c54f9e6f2b2df6e4a","ref":"refs/heads/main","pushedAt":"2023-11-25T13:11:59.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Lambda function classes refactored\n\n1. Introduced abstract class GenericFunction which creates response\nevents for success/failure scenarios; abstract template method\n'doAction' handles specific request;\n2. Classes CreateUserFunction, DeleteUserFunction, GetUserFunction,\nGetUserListByQueryFunction, GetUserListFunction, UpdateUserFunction\nderived from base class GenericFunction;\n3. Added enum class StatusCode to represent HTTP status codes.","shortMessageHtmlLink":"Lambda function classes refactored"}},{"before":"da5c4b22809f4c8028fe3740c01e43f289ff42ca","after":"979d3fab991d644bc1f0ee932b49a059d43f35b7","ref":"refs/heads/main","pushedAt":"2023-11-25T12:16:49.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Errors fixed\n\n1. Implemented method 'handleRequest' of class UpdateUserFunction;\n2. Implemented method 'updateUser' of class DynamoDBServiceImpl.","shortMessageHtmlLink":"Errors fixed"}},{"before":null,"after":"da5c4b22809f4c8028fe3740c01e43f289ff42ca","ref":"refs/heads/main","pushedAt":"2023-11-25T11:16:23.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"streamlined2","name":"Serhii Pylypenko","path":"/streamlined2","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/64580046?s=80&v=4"},"commit":{"message":"Initial commit: contains mistakes to fix","shortMessageHtmlLink":"Initial commit: contains mistakes to fix"}}],"hasNextPage":false,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAADy6U_kQA","startCursor":null,"endCursor":null}},"title":"Activity ยท streamlined2/dynamodb-app"}