Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
67 changes: 31 additions & 36 deletions src/main/java/com/provedcode/kudos/service/KudosService.java
Original file line number Diff line number Diff line change
Expand Up @@ -89,44 +89,39 @@ public KudosAmount getKudosForSponsor(long sponsorId, Authentication authenticat

@Transactional(readOnly = true)
public KudosAmountWithSponsor getProofKudos(long proofId, Authentication authentication) {
String login = authentication.getName();
UserInfo userInfo = userInfoRepository.findByLogin(login)
.orElseThrow(() -> new ResponseStatusException(NOT_FOUND,
"User with login = %s not found".formatted(
login)));
Talent talent = talentRepository.findById(userInfo.getId())
.orElseThrow(() -> new ResponseStatusException(NOT_FOUND,
"Talent with login = %s not found".formatted(
login)));
TalentProof talentProof = talentProofRepository.findById(proofId)
.orElseThrow(() -> new ResponseStatusException(NOT_FOUND,
"Proof with id = %s not found".formatted(
proofId)));
String login = authentication.getName();
UserInfo userInfo = userInfoRepository.findByLogin(login)
.orElseThrow(() -> new ResponseStatusException(NOT_FOUND,
"User with login = %s not found".formatted(login)));
Talent talent = talentRepository.findById(userInfo.getTalent().getId())
.orElseThrow(() -> new ResponseStatusException(NOT_FOUND,
"Talent with login = %s not found".formatted(login)));
TalentProof talentProof = talentProofRepository.findById(proofId)
.orElseThrow(() -> new ResponseStatusException(NOT_FOUND,
"Proof with id = %s not found".formatted(proofId)));

Long countOfAllKudos = talentProof.getKudos().stream()
.map(Kudos::getAmount)
.reduce(0L, (prev, next) -> prev + next);
Long countOfAllKudos = talentProof.getKudos().stream()
.map(Kudos::getAmount)
.reduce(0L, (prev, next) -> prev + next);

if (talent.getId().equals(talentProof.getTalent().getId())) {
Map<Long, SponsorDTO> kudosFromSponsor = talentProof.getKudos().stream()
.collect(Collectors.toMap(
Kudos::getAmount,
proof -> proof.getSponsor() != null
? sponsorMapper.toDto(
proof.getSponsor())
: SponsorDTO.builder().build(),
(prev, next) -> next,
HashMap::new
));
if (talent.getId().equals(talentProof.getTalent().getId())) {
Map<Long, SponsorDTO> kudosFromSponsor = talentProof.getKudos().stream()
.collect(Collectors.toMap(
Kudos::getAmount,
proof -> proof.getSponsor() != null
? sponsorMapper.toDto(proof.getSponsor())
: SponsorDTO.builder().build(),
(prev, next) -> next,
HashMap::new));

return KudosAmountWithSponsor.builder()
.allKudosOnProof(countOfAllKudos)
.kudosFromSponsor(kudosFromSponsor)
.build();
} else {
return KudosAmountWithSponsor.builder()
.allKudosOnProof(countOfAllKudos)
.kudosFromSponsor(null).build();
}
return KudosAmountWithSponsor.builder()
.allKudosOnProof(countOfAllKudos)
.kudosFromSponsor(kudosFromSponsor)
.build();
} else {
return KudosAmountWithSponsor.builder()
.allKudosOnProof(countOfAllKudos)
.kudosFromSponsor(null).build();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.provedcode.talent.model.dto.ProofSkillsDTO;
import com.provedcode.talent.model.dto.SkillsOnProofDTO;
import com.provedcode.talent.service.TalentSkillsService;
import com.provedcode.talent.service.ProofSkillsService;
import jakarta.validation.Valid;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
Expand All @@ -18,7 +18,7 @@
@RestController
@RequestMapping("/api/v4/talents")
public class TalentSkillsController {
TalentSkillsService talentSkillsService;
ProofSkillsService talentSkillsService;

@PostMapping("/{talent-id}/proofs/{proof-id}/skills")
void addSkillOnProof(@PathVariable("talent-id") long talentId,
Expand Down
27 changes: 21 additions & 6 deletions src/main/java/com/provedcode/talent/model/entity/Skills.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,20 @@
package com.provedcode.talent.model.entity;

import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import java.util.LinkedHashSet;
import java.util.Objects;
import java.util.Set;

import org.hibernate.Hibernate;

import java.util.Objects;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
Expand All @@ -18,11 +27,17 @@ public class Skills {
private Long id;
@Column(name = "skill", length = 30)
private String skill;
@ManyToMany(mappedBy = "skills")
private Set<TalentProof> talentProofs = new LinkedHashSet<>();
@ManyToMany(mappedBy = "skills")
private Set<Talent> talents = new LinkedHashSet<>();

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
if (this == o)
return true;
if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o))
return false;
Skills skills = (Skills) o;
return getId() != null && Objects.equals(getId(), skills.getId());
}
Expand Down
37 changes: 29 additions & 8 deletions src/main/java/com/provedcode/talent/model/entity/Talent.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,31 @@
package com.provedcode.talent.model.entity;

import jakarta.persistence.*;
import jakarta.validation.constraints.NotEmpty;
import lombok.*;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.URL;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

import org.hibernate.validator.constraints.URL;

import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.JoinTable;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.OneToMany;
import jakarta.persistence.OneToOne;
import jakarta.persistence.Table;
import jakarta.validation.constraints.NotEmpty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;

@Builder
@Accessors(chain = true)
Expand Down Expand Up @@ -41,12 +59,15 @@ public class Talent {
private TalentDescription talentDescription;
@OneToMany(mappedBy = "talent", cascade = CascadeType.ALL, orphanRemoval = true)
private List<TalentLink> talentLinks = new ArrayList<>();
// @OneToMany(mappedBy = "talent", cascade = CascadeType.ALL, orphanRemoval = true)
// private List<TalentSkills> talentTalents = new ArrayList<>();
@OneToMany(mappedBy = "talent", cascade = CascadeType.ALL, orphanRemoval = true)
private List<TalentContact> talentContacts = new ArrayList<>();
@OneToMany(mappedBy = "talent", cascade = CascadeType.ALL, orphanRemoval = true)
private List<TalentAttachedFile> talentAttachedFiles = new ArrayList<>();
@OneToMany(mappedBy = "talent", cascade = CascadeType.ALL, orphanRemoval = true)
private List<TalentProof> talentProofs = new ArrayList<>();
@ManyToMany
@JoinTable(name = "talent_skills",
joinColumns = @JoinColumn(name = "talent_id"),
inverseJoinColumns = @JoinColumn(name = "skill_id"))
private Set<Skills> skills = new LinkedHashSet<>();
}
40 changes: 29 additions & 11 deletions src/main/java/com/provedcode/talent/model/entity/TalentProof.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,38 @@
package com.provedcode.talent.model.entity;

import java.time.LocalDateTime;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

import org.hibernate.validator.constraints.URL;

import com.provedcode.kudos.model.entity.Kudos;
import com.provedcode.talent.model.ProofStatus;
import jakarta.persistence.*;

import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.JoinTable;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.URL;

import java.time.LocalDateTime;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

@Accessors(chain = true)
@NoArgsConstructor
Expand Down Expand Up @@ -44,8 +64,6 @@ public class TalentProof {
@OneToMany(fetch = FetchType.EAGER, mappedBy = "proof", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Kudos> kudos;
@ManyToMany
@JoinTable(name = "talent_skill",
joinColumns = @JoinColumn(name = "proof_id"),
inverseJoinColumns = @JoinColumn(name = "skill_id"))
@JoinTable(name = "proof_skill", joinColumns = @JoinColumn(name = "proof_id"), inverseJoinColumns = @JoinColumn(name = "skill_id"))
private Set<Skills> skills = new LinkedHashSet<>();
}
25 changes: 0 additions & 25 deletions src/main/java/com/provedcode/talent/model/entity/TalentSkills.java

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
@Transactional
@Service
@AllArgsConstructor
public class TalentSkillsService {
public class ProofSkillsService {
SkillsRepository skillsRepository;
TalentRepository talentRepository;
UserInfoRepository userInfoRepository;
Expand Down
23 changes: 13 additions & 10 deletions src/main/resources/db/changelog/changeset/V4/data-V4.1.sql
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
--liquibase formatted sql
--changeset dennis:3
-- Skill
INSERT INTO talent_skill (proof_id, skill_id)
-- Skill in proof
INSERT INTO proof_skill (proof_id, skill_id)
VALUES (1, 1);
INSERT INTO talent_skill (proof_id, skill_id)
INSERT INTO proof_skill (proof_id, skill_id)
VALUES (1, 2);
INSERT INTO talent_skill (proof_id, skill_id)
INSERT INTO proof_skill (proof_id, skill_id)
VALUES (1, 3);
INSERT INTO talent_skill (proof_id, skill_id)
INSERT INTO proof_skill (proof_id, skill_id)
VALUES (1, 4);
INSERT INTO talent_skill (proof_id, skill_id)
INSERT INTO proof_skill (proof_id, skill_id)
VALUES (4, 1);
INSERT INTO talent_skill (proof_id, skill_id)
INSERT INTO proof_skill (proof_id, skill_id)
VALUES (5, 2);
INSERT INTO talent_skill (proof_id, skill_id)
INSERT INTO proof_skill (proof_id, skill_id)
VALUES (6, 3);


-- Skill in talent
INSERT INTO talent_skill (talent_id, skill_id)
VALUES(1, 1);
INSERT INTO talent_skill (talent_id, skill_id)
VALUES(1, 2);
17 changes: 13 additions & 4 deletions src/main/resources/db/changelog/changeset/V4/schema-V4.sql
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,14 @@ CREATE TABLE talent_proofs (
CONSTRAINT pk_talent_proofs PRIMARY KEY (id)
);
CREATE TABLE talent_skill (
talent_id BIGINT NOT NULL,
skill_id BIGINT NOT NULL,
CONSTRAINT pk_talent_skill PRIMARY KEY (talent_id, skill_id)
);
CREATE TABLE proof_skill (
proof_id BIGINT NOT NULL,
skill_id BIGINT NOT NULL,
CONSTRAINT pk_talent_skill PRIMARY KEY (proof_id, skill_id)
CONSTRAINT pk_proof_skill PRIMARY KEY (proof_id, skill_id)
);
CREATE TABLE skill (
id BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
Expand All @@ -70,7 +75,7 @@ CREATE TABLE authority (
CONSTRAINT pk_authority PRIMARY KEY (id)
);
CREATE TABLE user_authorities (
authority_id BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
authority_id BIGINT NOT NULL,
user_id BIGINT NOT NULL,
CONSTRAINT pk_user_authorities PRIMARY KEY (authority_id, user_id)
);
Expand Down Expand Up @@ -112,9 +117,13 @@ ALTER TABLE kudos
ADD CONSTRAINT FK_KUDOS_ON_PROOF FOREIGN KEY (proof_id) REFERENCES talent_proofs (id);
ALTER TABLE kudos
ADD CONSTRAINT FK_KUDOS_ON_SPONSOR FOREIGN KEY (sponsor_id) REFERENCES sponsor (id);
ALTER TABLE proof_skill
ADD CONSTRAINT FK_proof_skill_ON_TALENT_PROOF FOREIGN KEY (proof_id) REFERENCES talent_proofs (id);
ALTER TABLE proof_skill
ADD CONSTRAINT FK_proof_skill_ON_SKILL FOREIGN KEY (skill_id) REFERENCES skill (id);
ALTER TABLE talent_skill
ADD CONSTRAINT FK_TALENT_SKILL_ON_TALENT_PROOF FOREIGN KEY (proof_id) REFERENCES talent_proofs (id);
ADD CONSTRAINT FK_talent_skill_ON_TALENT FOREIGN KEY (talent_id) REFERENCES talent (id);
ALTER TABLE talent_skill
ADD CONSTRAINT FK_TALENT_SKILL_ON_SKILL FOREIGN KEY (skill_id) REFERENCES skill (id);
ADD CONSTRAINT FK_talent_skill_ON_SKILL FOREIGN KEY (skill_id) REFERENCES skill (id);
-- Indexes
CREATE UNIQUE INDEX idx_login ON user_info (login)