From ebfb17048acb8e4ca59d3112233f8012419b96c3 Mon Sep 17 00:00:00 2001 From: Anna-Yavorska Date: Sat, 12 Jul 2025 15:56:40 +0200 Subject: [PATCH 1/8] Deleted unnecessary social media --- resources/static/fontawesome/css/all.css | 10 ------ resources/view/login.html | 9 +---- resources/view/unauth/register.html | 8 ----- .../handler/VkOAuth2UserDataHandler.java | 35 ------------------- .../handler/YandexOAuth2UserDataHandler.java | 21 ----------- src/main/resources/application.yaml | 24 ------------- src/main/resources/data4dev/data.sql | 3 +- .../profile/internal/web/ProfileTestData.java | 2 -- src/test/resources/data.sql | 3 +- 9 files changed, 3 insertions(+), 112 deletions(-) delete mode 100644 src/main/java/com/javarush/jira/login/internal/sociallogin/handler/VkOAuth2UserDataHandler.java delete mode 100644 src/main/java/com/javarush/jira/login/internal/sociallogin/handler/YandexOAuth2UserDataHandler.java diff --git a/resources/static/fontawesome/css/all.css b/resources/static/fontawesome/css/all.css index af5980828..f71679f4c 100644 --- a/resources/static/fontawesome/css/all.css +++ b/resources/static/fontawesome/css/all.css @@ -8603,9 +8603,6 @@ readers do not read off random characters that represent icons */ content: "\f3e8"; } -.fa-vk:before { - content: "\f189"; -} .fa-untappd:before { content: "\f405"; @@ -9955,10 +9952,6 @@ readers do not read off random characters that represent icons */ content: "\f3bc"; } -.fa-yandex:before { - content: "\f413"; -} - .fa-readme:before { content: "\f4d5"; } @@ -10183,9 +10176,6 @@ readers do not read off random characters that represent icons */ content: "\f7c6"; } -.fa-yandex-international:before { - content: "\f414"; -} .fa-cc-amex:before { content: "\f1f3"; diff --git a/resources/view/login.html b/resources/view/login.html index 8765ca8ff..8570fad46 100644 --- a/resources/view/login.html +++ b/resources/view/login.html @@ -48,14 +48,7 @@

Sign in

type="button"> - - - - - - + diff --git a/resources/view/unauth/register.html b/resources/view/unauth/register.html index 2ba955045..52a892bd3 100644 --- a/resources/view/unauth/register.html +++ b/resources/view/unauth/register.html @@ -77,14 +77,6 @@

Registration

type="button"> - - - - - - diff --git a/src/main/java/com/javarush/jira/login/internal/sociallogin/handler/VkOAuth2UserDataHandler.java b/src/main/java/com/javarush/jira/login/internal/sociallogin/handler/VkOAuth2UserDataHandler.java deleted file mode 100644 index e8e05be05..000000000 --- a/src/main/java/com/javarush/jira/login/internal/sociallogin/handler/VkOAuth2UserDataHandler.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.javarush.jira.login.internal.sociallogin.handler; - -import org.springframework.stereotype.Component; - -import java.util.List; -import java.util.Map; - -@Component("vk") -public class VkOAuth2UserDataHandler implements OAuth2UserDataHandler { - @Override - public String getFirstName(OAuth2UserData oAuth2UserData) { - return getAttribute(oAuth2UserData, "first_name"); - } - - @Override - public String getLastName(OAuth2UserData oAuth2UserData) { - return getAttribute(oAuth2UserData, "last_name"); - } - - @Override - public String getEmail(OAuth2UserData oAuth2UserData) { - return oAuth2UserData.getData("email"); - } - - private String getAttribute(OAuth2UserData oAuth2UserData, String name) { - List> attributesResponse = oAuth2UserData.getData("response"); - if (attributesResponse != null) { - Map attributes = attributesResponse.get(0); - if (attributes != null) { - return (String) attributes.get(name); - } - } - return null; - } -} diff --git a/src/main/java/com/javarush/jira/login/internal/sociallogin/handler/YandexOAuth2UserDataHandler.java b/src/main/java/com/javarush/jira/login/internal/sociallogin/handler/YandexOAuth2UserDataHandler.java deleted file mode 100644 index e8ea1ac1d..000000000 --- a/src/main/java/com/javarush/jira/login/internal/sociallogin/handler/YandexOAuth2UserDataHandler.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.javarush.jira.login.internal.sociallogin.handler; - -import org.springframework.stereotype.Component; - -@Component("yandex") -public class YandexOAuth2UserDataHandler implements OAuth2UserDataHandler { - @Override - public String getFirstName(OAuth2UserData oAuth2UserData) { - return oAuth2UserData.getData("first_name"); - } - - @Override - public String getLastName(OAuth2UserData oAuth2UserData) { - return oAuth2UserData.getData("last_name"); - } - - @Override - public String getEmail(OAuth2UserData oAuth2UserData) { - return oAuth2UserData.getData("default_email"); - } -} diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 7fcba1570..d9660eb05 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -61,20 +61,6 @@ spring: scope: - email - profile - vk: - client-id: 51562377 - client-secret: jNM1YHQy1362Mqs49wUN - client-name: Vkontakte - redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}" - client-authentication-method: client_secret_post - authorization-grant-type: authorization_code - scope: email - yandex: - client-id: 2f3395214ba84075956b76a34b231985 - client-secret: ed236c501e444a609b0f419e5e88f1e1 - client-name: Yandex - redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}" - authorization-grant-type: authorization_code gitlab: client-id: b8520a3266089063c0d8261cce36971defa513f5ffd9f9b7a3d16728fc83a494 client-secret: e72c65320cf9d6495984a37b0f9cc03ec46be0bb6f071feaebbfe75168117004 @@ -83,16 +69,6 @@ spring: authorization-grant-type: authorization_code scope: read_user provider: - vk: - authorization-uri: https://oauth.vk.com/authorize - token-uri: https://oauth.vk.com/access_token - user-info-uri: https://api.vk.com/method/users.get?v=8.1 - user-name-attribute: response - yandex: - authorization-uri: https://oauth.yandex.ru/authorize - token-uri: https://oauth.yandex.ru/token - user-info-uri: https://login.yandex.ru/info - user-name-attribute: login gitlab: authorization-uri: https://gitlab.com/oauth/authorize token-uri: https://gitlab.com/oauth/token diff --git a/src/main/resources/data4dev/data.sql b/src/main/resources/data4dev/data.sql index f101ab9b1..d9225f640 100644 --- a/src/main/resources/data4dev/data.sql +++ b/src/main/resources/data4dev/data.sql @@ -52,8 +52,7 @@ values (1, 'skype', 'userSkype'), (1, 'mobile', '+01234567890'), (1, 'website', 'user.com'), (2, 'github', 'adminGitHub'), - (2, 'tg', 'adminTg'), - (2, 'vk', 'adminVk'); + (2, 'tg', 'adminTg'); TRUNCATE TABLE ATTACHMENT; alter diff --git a/src/test/java/com/javarush/jira/profile/internal/web/ProfileTestData.java b/src/test/java/com/javarush/jira/profile/internal/web/ProfileTestData.java index fb4407268..cc0513971 100644 --- a/src/test/java/com/javarush/jira/profile/internal/web/ProfileTestData.java +++ b/src/test/java/com/javarush/jira/profile/internal/web/ProfileTestData.java @@ -44,7 +44,6 @@ public static ProfileTo getUpdatedTo() { new ContactTo("website", "new.com"), new ContactTo("github", "newGitHub"), new ContactTo("tg", "newTg"), - new ContactTo("vk", "newVk"), new ContactTo("linkedin", "newLinkedin"))); } @@ -57,7 +56,6 @@ public static Profile getUpdated(long id) { new Contact(id, "website", "new.com"), new Contact(id, "github", "newGitHub"), new Contact(id, "tg", "newTg"), - new Contact(id, "vk", "newVk"), new Contact(id, "linkedin", "newLinkedin"))); return profile; } diff --git a/src/test/resources/data.sql b/src/test/resources/data.sql index a04439d6c..758d8dc6e 100644 --- a/src/test/resources/data.sql +++ b/src/test/resources/data.sql @@ -45,8 +45,7 @@ values (1, 'skype', 'userSkype'), (1, 'mobile', '+01234567890'), (1, 'website', 'user.com'), (2, 'github', 'adminGitHub'), - (2, 'tg', 'adminTg'), - (2, 'vk', 'adminVk'); + (2, 'tg', 'adminTg'); insert into PROJECT (code, title, description, type_code, parent_id) From 49832d3a2b0278f8c35144828f9952ba924a3b2a Mon Sep 17 00:00:00 2001 From: Anna-Yavorska Date: Sat, 12 Jul 2025 16:28:21 +0200 Subject: [PATCH 2/8] Replaced all sensitive information --- .gitignore | 1 + pom.xml | 6 ++++ src/main/resources/application.yaml | 50 +++++++++++------------------ 3 files changed, 25 insertions(+), 32 deletions(-) diff --git a/.gitignore b/.gitignore index cd38e2e7b..7f9709787 100644 --- a/.gitignore +++ b/.gitignore @@ -5,5 +5,6 @@ target logs attachments *.patch +.env diff --git a/pom.xml b/pom.xml index 4556ac639..c555db575 100644 --- a/pom.xml +++ b/pom.xml @@ -152,6 +152,12 @@ true + + me.paulschwarz + spring-dotenv + 4.0.0 + + diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index d9660eb05..cb0598a99 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -1,4 +1,3 @@ -# https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html app: host-url: http://localhost:8080 test-mail: jira4jr@gmail.com @@ -13,57 +12,46 @@ spring: jpa: show-sql: true open-in-view: false - - # validate db by model hibernate: ddl-auto: validate - properties: - # http://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#configurations hibernate: format_sql: true default_batch_fetch_size: 20 - # https://stackoverflow.com/questions/21257819/what-is-the-difference-between-hibernate-jdbc-fetch-size-and-hibernate-jdbc-batc jdbc.batch_size: 20 datasource: - url: jdbc:postgresql://localhost:5432/jira - username: jira - password: JiraRush - + url: ${DB_URL} + username: ${DB_USERNAME} + password: ${DB_PASSWORD} liquibase: changeLog: "classpath:db/changelog.sql" - - # Jackson Fields Serialization jackson: visibility: field: any getter: none setter: none is-getter: none - - # https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#common-application-properties-cache cache: cache-names: users caffeine.spec: maximumSize=10000,expireAfterAccess=5m - security: oauth2: client: registration: github: - client-id: 3d0d8738e65881fff266 - client-secret: 0f97031ce6178b7dfb67a6af587f37e222a16120 + client-id: ${OAUTH_GITHUB_CLIENT_ID} + client-secret: ${OAUTH_GITHUB_CLIENT_SECRET} scope: - email google: - client-id: 329113642700-f8if6pu68j2repq3ef6umd5jgiliup60.apps.googleusercontent.com - client-secret: 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 + client-id: ${OAUTH_GOOGLE_CLIENT_ID} + client-secret: ${OAUTH_GOOGLE_CLIENT_SECRET} scope: - email - profile gitlab: - client-id: b8520a3266089063c0d8261cce36971defa513f5ffd9f9b7a3d16728fc83a494 - client-secret: e72c65320cf9d6495984a37b0f9cc03ec46be0bb6f071feaebbfe75168117004 + client-id: ${OAUTH_GITLAB_CLIENT_ID} + client-secret: ${OAUTH_GITLAB_CLIENT_SECRET} client-name: GitLab redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}" authorization-grant-type: authorization_code @@ -74,11 +62,9 @@ spring: token-uri: https://gitlab.com/oauth/token user-info-uri: https://gitlab.com/api/v4/user user-name-attribute: email - sql: init: mode: always - mail: properties: mail: @@ -87,13 +73,13 @@ spring: enable: true auth: true host: smtp.gmail.com - username: jira4jr@gmail.com - password: zdfzsrqvgimldzyj + username: ${MAIL_USERNAME} + password: ${MAIL_PASSWORD} port: 587 - thymeleaf.check-template-location: false - mvc.throw-exception-if-no-handler-found: true - web.resources.add-mappings: false +thymeleaf.check-template-location: false +mvc.throw-exception-if-no-handler-found: true +web.resources.add-mappings: false logging: level: @@ -103,11 +89,11 @@ logging: org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: DEBUG server: - # https://springdoc.org/index.html#how-can-i-deploy-springdoc-openapi-ui-behind-a-reverse-proxy forward-headers-strategy: framework servlet: encoding: - charset: UTF-8 # Charset of HTTP requests and responses. Added to the "Content-Type" header if not set explicitly - enabled: true # Enable http encoding support + charset: UTF-8 + enabled: true force: true -springdoc.swagger-ui.path: /doc + +springdoc.swagger-ui.path: /doc \ No newline at end of file From dca1bf2937fb499287f7efd083d1c564433be004 Mon Sep 17 00:00:00 2001 From: Anna-Yavorska Date: Thu, 17 Jul 2025 15:55:54 +0200 Subject: [PATCH 3/8] Refactor: modernize FileUtil.upload. --- .../jira/bugtracking/attachment/FileUtil.java | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/javarush/jira/bugtracking/attachment/FileUtil.java b/src/main/java/com/javarush/jira/bugtracking/attachment/FileUtil.java index 6cffbe175..083de0c79 100644 --- a/src/main/java/com/javarush/jira/bugtracking/attachment/FileUtil.java +++ b/src/main/java/com/javarush/jira/bugtracking/attachment/FileUtil.java @@ -7,10 +7,7 @@ import org.springframework.core.io.UrlResource; import org.springframework.web.multipart.MultipartFile; -import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; -import java.io.OutputStream; import java.net.MalformedURLException; import java.nio.file.Files; import java.nio.file.Path; @@ -24,15 +21,14 @@ public static void upload(MultipartFile multipartFile, String directoryPath, Str if (multipartFile.isEmpty()) { throw new IllegalRequestDataException("Select a file to upload."); } + try { + Path dirPath = Paths.get(directoryPath); + Files.createDirectories(dirPath); - File dir = new File(directoryPath); - if (dir.exists() || dir.mkdirs()) { - File file = new File(directoryPath + fileName); - try (OutputStream outStream = new FileOutputStream(file)) { - outStream.write(multipartFile.getBytes()); - } catch (IOException ex) { - throw new IllegalRequestDataException("Failed to upload file" + multipartFile.getOriginalFilename()); - } + Path filePath = dirPath.resolve(fileName); + Files.write(filePath, multipartFile.getBytes()); + } catch (IOException ex) { + throw new IllegalRequestDataException("Failed to upload file " + multipartFile.getOriginalFilename()); } } From 921ec759ee9bc8016299a85412c3a27eceaca177 Mon Sep 17 00:00:00 2001 From: Anna-Yavorska Date: Sat, 19 Jul 2025 17:33:31 +0200 Subject: [PATCH 4/8] Add tags --- .../javarush/jira/bugtracking/task/Task.java | 3 ++- .../jira/bugtracking/task/TaskController.java | 6 ++++++ .../jira/bugtracking/task/TaskService.java | 17 +++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/javarush/jira/bugtracking/task/Task.java b/src/main/java/com/javarush/jira/bugtracking/task/Task.java index 6c9f4d96e..29d85b727 100644 --- a/src/main/java/com/javarush/jira/bugtracking/task/Task.java +++ b/src/main/java/com/javarush/jira/bugtracking/task/Task.java @@ -14,6 +14,7 @@ import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; +import java.util.HashSet; import java.util.List; import java.util.Set; @@ -68,7 +69,7 @@ public class Task extends TitleEntity implements HasCode { @ElementCollection(fetch = FetchType.LAZY) @JoinColumn() @OnDelete(action = OnDeleteAction.CASCADE) - private Set<@Size(min = 2, max = 32) String> tags = Set.of(); + private Set<@Size(min = 2, max = 32) String> tags = new HashSet<>(); // history of comments and task fields changing @OneToMany(mappedBy = "taskId", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) diff --git a/src/main/java/com/javarush/jira/bugtracking/task/TaskController.java b/src/main/java/com/javarush/jira/bugtracking/task/TaskController.java index b53f7ff37..4fa2523af 100644 --- a/src/main/java/com/javarush/jira/bugtracking/task/TaskController.java +++ b/src/main/java/com/javarush/jira/bugtracking/task/TaskController.java @@ -156,4 +156,10 @@ public TaskTreeNode(TaskTo taskTo) { this(taskTo, new LinkedList<>()); } } + + @PostMapping("/{id}/tag") + @ResponseStatus(HttpStatus.NO_CONTENT) + public void addTag(@PathVariable long id, @RequestBody String tag) { + taskService.addTag(id, tag); + } } diff --git a/src/main/java/com/javarush/jira/bugtracking/task/TaskService.java b/src/main/java/com/javarush/jira/bugtracking/task/TaskService.java index e6f385548..945b01702 100644 --- a/src/main/java/com/javarush/jira/bugtracking/task/TaskService.java +++ b/src/main/java/com/javarush/jira/bugtracking/task/TaskService.java @@ -10,6 +10,7 @@ import com.javarush.jira.bugtracking.task.to.TaskToExt; import com.javarush.jira.bugtracking.task.to.TaskToFull; import com.javarush.jira.common.error.DataConflictException; +import com.javarush.jira.common.error.IllegalRequestDataException; import com.javarush.jira.common.error.NotFoundException; import com.javarush.jira.common.util.Util; import com.javarush.jira.login.AuthUser; @@ -140,4 +141,20 @@ private void checkAssignmentActionPossible(long id, String userType, boolean ass throw new DataConflictException(String.format(assign ? CANNOT_ASSIGN : CANNOT_UN_ASSIGN, userType, task.getStatusCode())); } } + + @Transactional + public void addTag(long id, String tag) { + if (tag == null || tag.isEmpty()) { + throw new IllegalRequestDataException("Tag must not be null or empty"); + } + if (tag.length() > 32) { + throw new IllegalRequestDataException("Tag must not exceed 32 characters"); + } + Task task = handler.getRepository().getExisted(id); + if (task.getTags().contains(tag)) { + throw new IllegalRequestDataException("Tag already exists for this task"); + } + task.getTags().add(tag); + handler.getRepository().saveAndFlush(task); + } } From d08d7788e5fe08e6842c20161ff693c11b317ffc Mon Sep 17 00:00:00 2001 From: Anna-Yavorska Date: Sat, 19 Jul 2025 20:12:17 +0200 Subject: [PATCH 5/8] Add counting of time --- .../bugtracking/task/ActivityRepository.java | 3 ++ .../bugtracking/task/ActivityService.java | 33 +++++++++++++++++++ src/main/resources/db/changelog.sql | 5 +++ 3 files changed, 41 insertions(+) diff --git a/src/main/java/com/javarush/jira/bugtracking/task/ActivityRepository.java b/src/main/java/com/javarush/jira/bugtracking/task/ActivityRepository.java index 3ce8a9386..ee073e636 100644 --- a/src/main/java/com/javarush/jira/bugtracking/task/ActivityRepository.java +++ b/src/main/java/com/javarush/jira/bugtracking/task/ActivityRepository.java @@ -5,6 +5,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.Optional; @Transactional(readOnly = true) public interface ActivityRepository extends BaseRepository { @@ -13,4 +14,6 @@ public interface ActivityRepository extends BaseRepository { @Query("SELECT a FROM Activity a JOIN FETCH a.author WHERE a.taskId =:taskId AND a.comment IS NOT NULL ORDER BY a.updated DESC") List findAllComments(long taskId); + + Optional findFirstByTaskIdAndStatusCodeOrderByUpdatedAsc (long taskId, String statusCode); } diff --git a/src/main/java/com/javarush/jira/bugtracking/task/ActivityService.java b/src/main/java/com/javarush/jira/bugtracking/task/ActivityService.java index 7938541bb..4fb739293 100644 --- a/src/main/java/com/javarush/jira/bugtracking/task/ActivityService.java +++ b/src/main/java/com/javarush/jira/bugtracking/task/ActivityService.java @@ -8,6 +8,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.Duration; +import java.time.LocalDateTime; import java.util.List; import static com.javarush.jira.bugtracking.task.TaskUtil.getLatestValue; @@ -19,6 +21,10 @@ public class ActivityService { private final Handlers.ActivityHandler handler; + public static final String IN_PROGRESS = "in_progress"; + public static final String READY_FOR_REVIEW = "ready_for_review"; + public static final String DONE = "done"; + private static void checkBelong(HasAuthorId activity) { if (activity.getAuthorId() != AuthUser.authId()) { throw new DataConflictException("Activity " + activity.getId() + " doesn't belong to " + AuthUser.get()); @@ -73,4 +79,31 @@ private void updateTaskIfRequired(long taskId, String activityStatus, String act } } } + + public Duration getProgressDuration(Task task) { + LocalDateTime readyForReview = getActivityUpdatedTime(task.id(), READY_FOR_REVIEW); + LocalDateTime inProgress = getActivityUpdatedTime(task.id(), IN_PROGRESS); + + if (readyForReview == null || inProgress == null) { + return Duration.ZERO; + } + return Duration.between(inProgress, readyForReview); + } + + public Duration getTestingDuration(Task task) { + LocalDateTime done = getActivityUpdatedTime(task.id(), DONE); + LocalDateTime readyForReview = getActivityUpdatedTime(task.id(), READY_FOR_REVIEW); + + if (readyForReview == null || done == null) { + return Duration.ZERO; + } + return Duration.between(readyForReview, done); + } + + public LocalDateTime getActivityUpdatedTime(long taskId, String statusCode) { + return handler.getRepository() + .findFirstByTaskIdAndStatusCodeOrderByUpdatedAsc(taskId, statusCode) + .map(Activity::getUpdated) + .orElse(null); + } } diff --git a/src/main/resources/db/changelog.sql b/src/main/resources/db/changelog.sql index 68591336d..330116943 100644 --- a/src/main/resources/db/changelog.sql +++ b/src/main/resources/db/changelog.sql @@ -329,3 +329,8 @@ values ('todo', 'ToDo', 3, 'in_progress,canceled|'), drop index UK_USER_BELONG; create unique index UK_USER_BELONG on USER_BELONG (OBJECT_ID, OBJECT_TYPE, USER_ID, USER_TYPE_CODE) where ENDPOINT is null; + +insert into ACTIVITY (AUTHOR_ID, TASK_ID, UPDATED, STATUS_CODE) +values (2, 1, '2023-07-19 19:05:10.000000', 'in_progress'), + (2, 1, '2023-07-19 19:15:10.000000', 'ready_for_review'), + (2, 1, '2023-07-19 19:25:10.000000', 'done'); \ No newline at end of file From 79e74fc4165b694f9bb83bfa7aff075b6ccddfc4 Mon Sep 17 00:00:00 2001 From: Anna-Yavorska Date: Sat, 19 Jul 2025 20:33:36 +0200 Subject: [PATCH 6/8] Replace insert into ACTIVITY into new file --- src/main/resources/db/changelog.sql | 5 ----- src/main/resources/db/logs_for_time_counting.sql | 5 +++++ 2 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 src/main/resources/db/logs_for_time_counting.sql diff --git a/src/main/resources/db/changelog.sql b/src/main/resources/db/changelog.sql index 330116943..68591336d 100644 --- a/src/main/resources/db/changelog.sql +++ b/src/main/resources/db/changelog.sql @@ -329,8 +329,3 @@ values ('todo', 'ToDo', 3, 'in_progress,canceled|'), drop index UK_USER_BELONG; create unique index UK_USER_BELONG on USER_BELONG (OBJECT_ID, OBJECT_TYPE, USER_ID, USER_TYPE_CODE) where ENDPOINT is null; - -insert into ACTIVITY (AUTHOR_ID, TASK_ID, UPDATED, STATUS_CODE) -values (2, 1, '2023-07-19 19:05:10.000000', 'in_progress'), - (2, 1, '2023-07-19 19:15:10.000000', 'ready_for_review'), - (2, 1, '2023-07-19 19:25:10.000000', 'done'); \ No newline at end of file diff --git a/src/main/resources/db/logs_for_time_counting.sql b/src/main/resources/db/logs_for_time_counting.sql new file mode 100644 index 000000000..2992be538 --- /dev/null +++ b/src/main/resources/db/logs_for_time_counting.sql @@ -0,0 +1,5 @@ + +insert into ACTIVITY (AUTHOR_ID, TASK_ID, UPDATED, STATUS_CODE) +values (2, 1, '2025-07-19 19:05:10.000000', 'in_progress'), + (2, 1, '2025-07-19 19:15:10.000000', 'ready_for_review'), + (2, 1, '2025-07-19 19:25:10.000000', 'done'); \ No newline at end of file From b4fc3b326d66c7cf892d325fe753c92eec88c361 Mon Sep 17 00:00:00 2001 From: Anna-Yavorska Date: Sat, 19 Jul 2025 20:57:09 +0200 Subject: [PATCH 7/8] Add Dockerfile --- Dockerfile | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..507a3b56d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM eclipse-temurin:17-jdk + +WORKDIR /app + +COPY target/*.jar app.jar + +EXPOSE 8080 + +ENTRYPOINT ["java", "-jar", "app.jar"] \ No newline at end of file From 9a3c5387f2b91e30ede0c8daf015b5cb7fe35752 Mon Sep 17 00:00:00 2001 From: Anna-Yavorska Date: Sat, 19 Jul 2025 21:37:59 +0200 Subject: [PATCH 8/8] Change a readme file --- README.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 719b268f5..4d2411b15 100644 --- a/README.md +++ b/README.md @@ -27,4 +27,11 @@ - https://habr.com/ru/articles/259055/ Список выполненных задач: -... \ No newline at end of file + +1. Розібратися зі структурою проєкту (onboarding). +2. Видалити соціальні мережі: vk, yandex. Easy task +3. Винести чутливу інформацію до окремого проперті файлу. +6. Зробити рефакторинг методу com.javarush.jira.bugtracking.attachment.FileUtil#upload. +7. Додати новий функціонал: додавання тегів до завдання. +8. Додати підрахунок часу: скільки завдання перебувало у роботі та тестуванні. +9. Написати Dockerfile для основного сервера