Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
04ca52a
Db repo (#31)
LordRenDS Mar 20, 2023
1d52efb
Updated TalentController
Maslyna Mar 21, 2023
badfc53
Created TalentExceptionHandler
Maslyna Mar 21, 2023
2fb0942
Updated TalentController: Added new endpoint `GET(/talents/{id})`, th…
Maslyna Mar 21, 2023
775886e
Refactored project structure
Maslyna Mar 21, 2023
3a393b4
Merge pull request #32 from ProvedCode/tasks-3-6
Maslyna Mar 21, 2023
9180e5f
BUGFIX: `BeanDefinitionStoreException: Failed to parse configuration …
Maslyna Mar 22, 2023
73b787f
user-story-1 (#35)
Maslyna Mar 24, 2023
a4145af
bugfix (#36)
Maslyna Mar 25, 2023
8b174a6
Add WebConfig (#48)
LordRenDS Mar 26, 2023
520855d
Add @CrossOrigin to TalentController (#50)
LordRenDS Mar 26, 2023
f340825
Delete WebConfig (#52)
LordRenDS Mar 26, 2023
efaac0b
data.sql Update
Maslyna Mar 26, 2023
4c15848
Edit data.sql and schema.sql
LordRenDS Mar 26, 2023
a21a15a
Edit UserInfo: add user_id and @NotNull, @NotEmpty validations
LordRenDS Mar 26, 2023
e220c32
Edit UserInfo: add @Builder, @AllArgsConstructor, @NoArgsConstructor
LordRenDS Mar 26, 2023
41fad81
commit 1
Maslyna Mar 27, 2023
dd96682
commit 2
Maslyna Mar 27, 2023
a987949
BugFix
Maslyna Mar 27, 2023
94c1325
commit 3
Maslyna Mar 27, 2023
51775bd
Edit UserAuthorityRepository, AuthenticationController, SecurityConfi…
LordRenDS Mar 27, 2023
11b01cc
Create trash in AuthenticationController
LordRenDS Mar 27, 2023
e40af7f
Code refactor
Maslyna Mar 28, 2023
e007bc8
BugFix: don`t ask me
Maslyna Mar 28, 2023
83c8ee9
Add enum Role, add findByAuthority to AuthorityRepository, do some re…
LordRenDS Mar 28, 2023
762e05d
Refactored code
Maslyna Mar 28, 2023
2b007f5
Refactored code
Maslyna Mar 28, 2023
b5d56c5
Refactored code
Maslyna Mar 29, 2023
a679dad
Merge branch 'branch-for-merge' into UserStory#3(1.0)
LordRenDS Apr 3, 2023
5d74262
Delete unused files
LordRenDS Apr 3, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions src/main/java/com/provedcode/annotations/UrlList.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.provedcode.annotations;

import com.provedcode.annotations.impl.UrlListValidator;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = UrlListValidator.class)
public @interface UrlList {
String message() default "The list should contain only URLs";

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default {};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.provedcode.annotations.impl;

import com.provedcode.annotations.UrlList;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;

import java.net.URL;
import java.util.List;

public class UrlListValidator implements ConstraintValidator<UrlList, List<String>> {
@Override
public boolean isValid(List<String> value, ConstraintValidatorContext context) {
if (value == null) {
return true;
}
for (String url : value) {
if (!isUrl(url)) {
return false;
}
}
return true;
}

private boolean isUrl(String url) {
try {
new URL(url).toURI();
return true;
} catch (Exception e) {
return false;
}
}
}
20 changes: 19 additions & 1 deletion src/main/java/com/provedcode/talent/TalentController.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,23 @@
import com.provedcode.talent.model.dto.FullTalentDTO;
import com.provedcode.talent.model.dto.ShortTalentDTO;
import com.provedcode.talent.service.TalentService;
import com.provedcode.user.model.dto.SessionInfoDTO;
import jakarta.validation.Valid;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.*;

import java.util.Optional;

@Slf4j
@RestController
@AllArgsConstructor
@CrossOrigin(origins = "*", allowedHeaders = "*", methods = {RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE})
@CrossOrigin(origins = "*", allowedHeaders = "*", methods = {RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT,
RequestMethod.DELETE})
@RequestMapping("/api")
public class TalentController {
TalentService talentService;
Expand All @@ -33,4 +37,18 @@ Page<ShortTalentDTO> getTalents(@RequestParam(value = "page") Optional<Integer>
return talentService.getTalentsPage(page, size);
}

@PreAuthorize("hasRole('TALENT')")
@PatchMapping("/talents/{talent-id}")
FullTalentDTO editTalent(@PathVariable("talent-id") long id,
@RequestBody @Valid FullTalentDTO fullTalent,
Authentication authentication) {
return talentService.editTalent(id, fullTalent, authentication);
}

@PreAuthorize("hasRole('TALENT')")
@DeleteMapping("/talents/{id}")
SessionInfoDTO deleteTalent(@PathVariable("id") long id, Authentication authentication) {
return talentService.deleteTalentById(id, authentication);
}

}
41 changes: 28 additions & 13 deletions src/main/java/com/provedcode/talent/model/dto/FullTalentDTO.java
Original file line number Diff line number Diff line change
@@ -1,20 +1,35 @@
package com.provedcode.talent.model.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.provedcode.annotations.UrlList;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Builder;
import org.hibernate.validator.constraints.URL;

import java.util.List;

@Builder
public record FullTalentDTO (
Long id,
String firstName,
String lastName,
String image,
String specialization,
String additionalInfo,
String bio,
List<String> skills,
List<String> links,
List<String> contacts,
List<String> attachedFiles
) {}
public record FullTalentDTO(
Long id,
@NotEmpty
@JsonProperty("first_name")
String firstName,
@NotEmpty
@JsonProperty("last_name")
String lastName,
String image,
@NotEmpty
String specialization,
@JsonProperty("additional_info")
String additionalInfo,
String bio,
List<String> skills,
@UrlList
List<String> links,
List<String> contacts,
@UrlList
@JsonProperty("attached_files")
List<String> attachedFiles
) {
}
23 changes: 15 additions & 8 deletions src/main/java/com/provedcode/talent/model/entity/Talent.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.*;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.URL;

import java.util.ArrayList;
import java.util.List;

@Builder
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@Getter
Expand All @@ -22,28 +24,33 @@ public class Talent {
@Column(nullable = false, insertable = false, updatable = false)
private Long id;
@NotEmpty
@NotNull
@Column(name = "first_name", length = 20)
private String firstName;
@NotEmpty
@NotNull
@Column(name = "last_name", length = 20)
private String lastName;
@NotEmpty
@NotNull
@Column(name = "specialization", length = 30)
private String specialization;
@URL
@Column(name = "image", length = 100)
private String image;
@OneToOne(mappedBy = "talent", orphanRemoval = true)
@OneToOne(mappedBy = "talent", cascade = CascadeType.ALL, orphanRemoval = true)
private TalentDescription talentDescription;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "talent", orphanRemoval = true)
@OneToMany(fetch = FetchType.EAGER, mappedBy = "talent", cascade = CascadeType.ALL, orphanRemoval = true)
private List<TalentLink> talentLinks = new ArrayList<>();
@OneToMany(fetch = FetchType.EAGER, mappedBy = "talent", orphanRemoval = true)
@OneToMany(fetch = FetchType.EAGER, mappedBy = "talent", cascade = CascadeType.ALL, orphanRemoval = true)
private List<TalentSkill> talentSkills = new ArrayList<>();
@OneToMany(fetch = FetchType.EAGER, mappedBy = "talent", orphanRemoval = true)
@OneToMany(fetch = FetchType.EAGER, mappedBy = "talent", cascade = CascadeType.ALL, orphanRemoval = true)
private List<TalentContact> talentContacts = new ArrayList<>();
@OneToMany(fetch = FetchType.EAGER, mappedBy = "talent", orphanRemoval = true)
@OneToMany(fetch = FetchType.EAGER, mappedBy = "talent", cascade = CascadeType.ALL, orphanRemoval = true)
private List<TalentAttachedFile> talentAttachedFiles = new ArrayList<>();

public void addTalentSkill(TalentSkill talentSkill) {
talentSkills.add(talentSkill);
}

public void removeTalentSkill(TalentSkill talentSkill) {
talentSkills.remove(talentSkill);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@

import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
import lombok.*;
import org.hibernate.validator.constraints.URL;

@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@Setter
@Entity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@

import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
import lombok.*;

@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@Setter
@Entity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import lombok.*;
import lombok.experimental.Accessors;

@Builder
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@Getter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@

import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
import lombok.*;
import org.hibernate.validator.constraints.URL;

@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@Setter
@Entity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@

import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
import lombok.*;

@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@Setter
@Entity
Expand Down
20 changes: 11 additions & 9 deletions src/main/java/com/provedcode/talent/repo/TalentRepository.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
package com.provedcode.talent.repo;

import com.provedcode.talent.model.entity.Talent;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import com.provedcode.talent.model.entity.TalentSkill;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;

import java.util.Optional;

public interface TalentRepository {

Page<Talent> findAll(Pageable pageable);

Optional<Talent> findById(Long aLong);
public interface TalentRepository extends
JpaRepository<Talent, Long> {
@Transactional
@Modifying
@Query("update Talent t set t.talentSkills = ?1")
int updateTalentSkillsBy(TalentSkill talentSkills);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.provedcode.talent.repo;

import com.provedcode.talent.model.entity.Talent;
import com.provedcode.talent.model.entity.TalentSkill;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface TalentSkillRepository extends JpaRepository<TalentSkill, Long> {
List<TalentSkill> deleteByTalent(Talent talent);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,19 @@

import com.provedcode.talent.model.dto.FullTalentDTO;
import com.provedcode.talent.model.dto.ShortTalentDTO;
import com.provedcode.user.model.dto.SessionInfoDTO;
import org.springframework.security.core.Authentication;
import org.springframework.data.domain.Page;

import java.util.List;
import java.util.Optional;


public interface TalentService {
Page<ShortTalentDTO> getTalentsPage(Optional<Integer> page, Optional<Integer> size);

FullTalentDTO getTalentById(long id);

FullTalentDTO editTalent(long id, FullTalentDTO fullTalent, Authentication authentication);

SessionInfoDTO deleteTalentById(long id, Authentication authentication);
}
Loading