added sending email notifications
This commit is contained in:
parent
a60a7a99b3
commit
78ba74cd0d
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,6 +1,7 @@
|
|||||||
.db/
|
.db/
|
||||||
.env
|
.env
|
||||||
todo
|
todo
|
||||||
|
.creds
|
||||||
./init/*
|
./init/*
|
||||||
*temp.java
|
*temp.java
|
||||||
./src/main/java/dev/ksan/etfoglasiserver/temp.java
|
./src/main/java/dev/ksan/etfoglasiserver/temp.java
|
||||||
|
|||||||
@ -34,6 +34,7 @@ dependencies {
|
|||||||
testImplementation 'org.springframework.boot:spring-boot-starter-test'
|
testImplementation 'org.springframework.boot:spring-boot-starter-test'
|
||||||
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
|
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
|
||||||
|
|
||||||
|
implementation("org.simplejavamail:simple-java-mail:8.0.1")
|
||||||
implementation("net.sourceforge.htmlunit:htmlunit:2.70.0")
|
implementation("net.sourceforge.htmlunit:htmlunit:2.70.0")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package dev.ksan.etfoglasiserver.controller;
|
|||||||
|
|
||||||
import dev.ksan.etfoglasiserver.dto.UserCreationDTO;
|
import dev.ksan.etfoglasiserver.dto.UserCreationDTO;
|
||||||
import dev.ksan.etfoglasiserver.dto.UserDTO;
|
import dev.ksan.etfoglasiserver.dto.UserDTO;
|
||||||
|
import dev.ksan.etfoglasiserver.model.NotificationMethod;
|
||||||
import dev.ksan.etfoglasiserver.model.User;
|
import dev.ksan.etfoglasiserver.model.User;
|
||||||
import dev.ksan.etfoglasiserver.service.UserService;
|
import dev.ksan.etfoglasiserver.service.UserService;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -27,40 +28,21 @@ public class UserController {
|
|||||||
|
|
||||||
public UserDTO getUserDTO(User user) {
|
public UserDTO getUserDTO(User user) {
|
||||||
|
|
||||||
return new UserDTO(user.getId(), user.getEmail());
|
return new UserDTO(user.getId(), user.getEmail(), user.getSubjectSet());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
@GetMapping("/users")
|
|
||||||
public List<User> getUsers() {
|
|
||||||
return service.getUsers();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@GetMapping("/users/{userId}")
|
|
||||||
public User getUserById(@PathVariable UUID userId) {
|
|
||||||
return service.getUserById(userId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping("/users")
|
|
||||||
public void addUser(@RequestBody User user) {
|
|
||||||
service.addUser(user);
|
|
||||||
}
|
|
||||||
|
|
||||||
@PutMapping("/users")
|
|
||||||
public void updateUser(@RequestBody User user) {
|
|
||||||
service.updateUser(user);
|
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
@PutMapping("/users")
|
@PutMapping("/users")
|
||||||
public void updateUser(@RequestBody UserCreationDTO user) {
|
public void updateUser(@RequestBody UserCreationDTO user) {
|
||||||
|
|
||||||
|
NotificationMethod method = NotificationMethod.valueOf(user.getNotification());
|
||||||
|
user.setNotificationMethod(method);
|
||||||
service.updateUser(user);
|
service.updateUser(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/users")
|
@PostMapping("/users")
|
||||||
public void addUser(@RequestBody UserCreationDTO user) {
|
public void addUser(@RequestBody UserCreationDTO user) {
|
||||||
|
NotificationMethod method = NotificationMethod.valueOf(user.getNotification());
|
||||||
|
user.setNotificationMethod(method);
|
||||||
service.addUser(user);
|
service.addUser(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,9 +1,17 @@
|
|||||||
package dev.ksan.etfoglasiserver.dto;
|
package dev.ksan.etfoglasiserver.dto;
|
||||||
|
|
||||||
|
import dev.ksan.etfoglasiserver.model.NotificationMethod;
|
||||||
|
import dev.ksan.etfoglasiserver.model.Subject;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public class UserCreationDTO {
|
public class UserCreationDTO {
|
||||||
private String email;
|
private String email;
|
||||||
private String newEmail;
|
private String newEmail;
|
||||||
private String password;
|
private String password;
|
||||||
|
private Set<Subject> subjectSet;
|
||||||
|
private String notification;
|
||||||
|
private NotificationMethod notificationMethod;
|
||||||
|
|
||||||
public String getEmail() {
|
public String getEmail() {
|
||||||
return email;
|
return email;
|
||||||
@ -23,4 +31,34 @@ public class UserCreationDTO {
|
|||||||
public void setPassword(String password) {
|
public void setPassword(String password) {
|
||||||
this.password = password;
|
this.password = password;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Set<Subject> getSubjectSet() {
|
||||||
|
return subjectSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSubjectSet(Set<Subject> subjectSet) {
|
||||||
|
this.subjectSet = subjectSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNotification() {
|
||||||
|
return notification;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setNotification(String notificationMethod) {
|
||||||
|
this.notification = notificationMethod;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewEmail(String newEmail) {
|
||||||
|
this.newEmail = newEmail;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setNotificationMethod(NotificationMethod method) {
|
||||||
|
|
||||||
|
this.notificationMethod = method;
|
||||||
|
}
|
||||||
|
public NotificationMethod getNotificationMethod() {
|
||||||
|
return notificationMethod;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,15 +1,24 @@
|
|||||||
package dev.ksan.etfoglasiserver.dto;
|
package dev.ksan.etfoglasiserver.dto;
|
||||||
|
|
||||||
|
import dev.ksan.etfoglasiserver.model.NotificationMethod;
|
||||||
|
import dev.ksan.etfoglasiserver.model.Subject;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class UserDTO {
|
public class UserDTO {
|
||||||
private UUID id;
|
private UUID id;
|
||||||
private String email;
|
private String email;
|
||||||
|
private Set<Subject> subjectSet;
|
||||||
|
private NotificationMethod notificationMethod;
|
||||||
public UserDTO() {}
|
public UserDTO() {}
|
||||||
public UserDTO(UUID id, String email) {
|
|
||||||
|
public UserDTO(UUID id, String email, Set<Subject> subjectSet) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.email = email;
|
this.email = email;
|
||||||
|
this.subjectSet = subjectSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
public UUID getId() {
|
public UUID getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
@ -22,4 +31,20 @@ public class UserDTO {
|
|||||||
public void setEmail(String email) {
|
public void setEmail(String email) {
|
||||||
this.email = email;
|
this.email = email;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Set<Subject> getSubjectSet() {
|
||||||
|
return subjectSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSubjectSet(Set<Subject> subjectSet) {
|
||||||
|
this.subjectSet = subjectSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NotificationMethod getNotificationMethod() {
|
||||||
|
return notificationMethod;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNotificationMethod(NotificationMethod notificationMethod) {
|
||||||
|
this.notificationMethod = notificationMethod;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,8 @@
|
|||||||
|
package dev.ksan.etfoglasiserver.model;
|
||||||
|
|
||||||
|
public enum NotificationMethod {
|
||||||
|
|
||||||
|
NO_NOTIFICATION,
|
||||||
|
EMAIL,
|
||||||
|
PUSH_NOTIFICATION
|
||||||
|
}
|
||||||
@ -1,11 +1,8 @@
|
|||||||
package dev.ksan.etfoglasiserver.model;
|
package dev.ksan.etfoglasiserver.model;
|
||||||
|
|
||||||
import jakarta.persistence.Column;
|
import jakarta.persistence.*;
|
||||||
import jakarta.persistence.Entity;
|
|
||||||
import jakarta.persistence.GeneratedValue;
|
import java.util.Set;
|
||||||
import jakarta.persistence.GenerationType;
|
|
||||||
import jakarta.persistence.Id;
|
|
||||||
import jakarta.persistence.Table;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@ -21,6 +18,8 @@ public class Subject {
|
|||||||
@Column(nullable = false)
|
@Column(nullable = false)
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
|
@ManyToMany(mappedBy = "subjectSet", fetch = FetchType.LAZY)
|
||||||
|
Set<User> users;
|
||||||
public Subject(){
|
public Subject(){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package dev.ksan.etfoglasiserver.model;
|
|||||||
import dev.ksan.etfoglasiserver.dto.UserCreationDTO;
|
import dev.ksan.etfoglasiserver.dto.UserCreationDTO;
|
||||||
import jakarta.persistence.*;
|
import jakarta.persistence.*;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@ -26,6 +27,15 @@ public class User {
|
|||||||
columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
|
columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
|
||||||
private LocalDateTime regTime;
|
private LocalDateTime regTime;
|
||||||
|
|
||||||
|
@Enumerated(EnumType.STRING)
|
||||||
|
@Column(name = "notification_type", nullable = false)
|
||||||
|
private NotificationMethod notificationType = NotificationMethod.NO_NOTIFICATION;
|
||||||
|
|
||||||
|
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
|
||||||
|
@JoinTable(name = "user-subject", joinColumns = @JoinColumn(name = "user_id"),
|
||||||
|
inverseJoinColumns = @JoinColumn(name = "subject_id"))
|
||||||
|
private Set<Subject> subjectSet;
|
||||||
|
|
||||||
public User() {}
|
public User() {}
|
||||||
|
|
||||||
public User(UserCreationDTO user) {
|
public User(UserCreationDTO user) {
|
||||||
@ -53,6 +63,7 @@ public class User {
|
|||||||
return password;
|
return password;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setPassword(String password) {
|
public void setPassword(String password) {
|
||||||
this.password = password;
|
this.password = password;
|
||||||
}
|
}
|
||||||
@ -60,4 +71,22 @@ public class User {
|
|||||||
public LocalDateTime getRegTime() {
|
public LocalDateTime getRegTime() {
|
||||||
return regTime;
|
return regTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Set<Subject> getSubjectSet() {
|
||||||
|
return subjectSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSubjectSet(Set<Subject> subjectSet) {
|
||||||
|
this.subjectSet = subjectSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void setNotificationMethod(NotificationMethod notificationMethod) {
|
||||||
|
this.notificationType = notificationMethod;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NotificationMethod getNotificationMethod() {
|
||||||
|
return notificationType;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,8 +3,10 @@ package dev.ksan.etfoglasiserver.repository;
|
|||||||
import dev.ksan.etfoglasiserver.model.User;
|
import dev.ksan.etfoglasiserver.model.User;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
import org.springframework.data.repository.query.Param;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@ -13,4 +15,8 @@ public interface UserRepo extends JpaRepository<User, UUID> {
|
|||||||
|
|
||||||
@Query("SELECT u FROM User u WHERE u.email = :email")
|
@Query("SELECT u FROM User u WHERE u.email = :email")
|
||||||
Optional<User> findByEmail(String email);
|
Optional<User> findByEmail(String email);
|
||||||
|
|
||||||
|
|
||||||
|
@Query("SELECT u FROM User u JOIN u.subjectSet s WHERE s.id = :subjectId")
|
||||||
|
List<User> findUsersBySubjectId(@Param("subjectId") UUID id);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,7 +15,7 @@ public class EntryService {
|
|||||||
|
|
||||||
@Autowired EntryRepo entryRepo;
|
@Autowired EntryRepo entryRepo;
|
||||||
|
|
||||||
@Autowired SubjectRepo subjectRepo;
|
@Autowired SubjectService subjectService;
|
||||||
|
|
||||||
public List<Entry> getEntries() {
|
public List<Entry> getEntries() {
|
||||||
return entryRepo.findAll();
|
return entryRepo.findAll();
|
||||||
@ -28,9 +28,8 @@ public class EntryService {
|
|||||||
public void addEntry(EntryDTO entry) {
|
public void addEntry(EntryDTO entry) {
|
||||||
|
|
||||||
Subject subject =
|
Subject subject =
|
||||||
subjectRepo
|
subjectService
|
||||||
.findById(entry.getSubjectId())
|
.findById(entry.getSubjectId());
|
||||||
.orElseThrow(() -> new RuntimeException("Subject not found"));
|
|
||||||
Entry newEntry = new Entry(entry);
|
Entry newEntry = new Entry(entry);
|
||||||
newEntry.setSubject(subject);
|
newEntry.setSubject(subject);
|
||||||
entryRepo.save(newEntry);
|
entryRepo.save(newEntry);
|
||||||
@ -42,14 +41,15 @@ public class EntryService {
|
|||||||
entryRepo.save(entry);
|
entryRepo.save(entry);
|
||||||
}catch (Exception e) {
|
}catch (Exception e) {
|
||||||
System.out.println("Duplicate");
|
System.out.println("Duplicate");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
subjectService.notify(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateEntry(EntryDTO entry) {
|
public void updateEntry(EntryDTO entry) {
|
||||||
Subject subject =
|
Subject subject =
|
||||||
subjectRepo
|
subjectService
|
||||||
.findById(entry.getSubjectId())
|
.findById(entry.getSubjectId());
|
||||||
.orElseThrow(() -> new RuntimeException("Subject not found"));
|
|
||||||
Entry updateEntry = entryRepo.findById(entry.getId()).orElseThrow(() -> new RuntimeException("Entry not found"));
|
Entry updateEntry = entryRepo.findById(entry.getId()).orElseThrow(() -> new RuntimeException("Entry not found"));
|
||||||
updateEntry.setSubject(subject);
|
updateEntry.setSubject(subject);
|
||||||
if (entry.getTitle() != null) {
|
if (entry.getTitle() != null) {
|
||||||
|
|||||||
@ -0,0 +1,41 @@
|
|||||||
|
package dev.ksan.etfoglasiserver.service;
|
||||||
|
|
||||||
|
import org.simplejavamail.api.email.Email;
|
||||||
|
import org.simplejavamail.api.mailer.Mailer;
|
||||||
|
import org.simplejavamail.api.mailer.config.TransportStrategy;
|
||||||
|
import org.simplejavamail.email.EmailBuilder;
|
||||||
|
import org.simplejavamail.mailer.MailerBuilder;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class MailService {
|
||||||
|
String address;
|
||||||
|
String passwd;
|
||||||
|
Mailer mailer;
|
||||||
|
|
||||||
|
public MailService(String filename) {
|
||||||
|
try(BufferedReader br = new BufferedReader((new FileReader(filename)))) {
|
||||||
|
address = br.readLine();
|
||||||
|
System.out.println(address);
|
||||||
|
passwd = br.readLine();
|
||||||
|
}catch(IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
this.mailer = MailerBuilder
|
||||||
|
.withSMTPServer("smtp.gmail.com",587,address,passwd)
|
||||||
|
.withTransportStrategy(TransportStrategy.SMTP)
|
||||||
|
.withSessionTimeout(10_000).buildMailer();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendEmail(String to, String subject, String body) {
|
||||||
|
Email email = EmailBuilder.startingBlank()
|
||||||
|
.from(address).to(to)
|
||||||
|
.withSubject(subject)
|
||||||
|
.withPlainText(body).buildEmail();
|
||||||
|
|
||||||
|
mailer.sendMail(email);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -29,8 +29,6 @@ public class Scraper implements Runnable {
|
|||||||
@Autowired SubjectAltService altService;
|
@Autowired SubjectAltService altService;
|
||||||
@Autowired EntryService entryService;
|
@Autowired EntryService entryService;
|
||||||
|
|
||||||
private static List<Entry> entries = new ArrayList<>();
|
|
||||||
|
|
||||||
private WebClient webClient;
|
private WebClient webClient;
|
||||||
private volatile boolean running = true;
|
private volatile boolean running = true;
|
||||||
|
|
||||||
@ -46,12 +44,6 @@ public class Scraper implements Runnable {
|
|||||||
return element == null ? "" : element.asNormalizedText();
|
return element == null ? "" : element.asNormalizedText();
|
||||||
}
|
}
|
||||||
|
|
||||||
static List<Entry> getEntries() {
|
|
||||||
synchronized (entries) {
|
|
||||||
return new ArrayList<>(entries);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss");
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss");
|
||||||
|
|
||||||
private void configureHtmlUnitLogging() {
|
private void configureHtmlUnitLogging() {
|
||||||
@ -118,7 +110,6 @@ public class Scraper implements Runnable {
|
|||||||
|
|
||||||
|
|
||||||
entryService.addEntry(entry);
|
entryService.addEntry(entry);
|
||||||
entries.add(entry);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ul_idSelection++;
|
ul_idSelection++;
|
||||||
|
|||||||
@ -5,6 +5,8 @@ import dev.ksan.etfoglasiserver.model.SubjectAlt;
|
|||||||
import dev.ksan.etfoglasiserver.repository.SubjectAltRepo;
|
import dev.ksan.etfoglasiserver.repository.SubjectAltRepo;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import dev.ksan.etfoglasiserver.repository.SubjectRepo;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.data.domain.PageRequest;
|
import org.springframework.data.domain.PageRequest;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
|
|||||||
@ -1,9 +1,15 @@
|
|||||||
package dev.ksan.etfoglasiserver.service;
|
package dev.ksan.etfoglasiserver.service;
|
||||||
|
|
||||||
|
import dev.ksan.etfoglasiserver.model.Entry;
|
||||||
|
import dev.ksan.etfoglasiserver.model.NotificationMethod;
|
||||||
import dev.ksan.etfoglasiserver.model.Subject;
|
import dev.ksan.etfoglasiserver.model.Subject;
|
||||||
|
import dev.ksan.etfoglasiserver.model.User;
|
||||||
import dev.ksan.etfoglasiserver.repository.SubjectRepo;
|
import dev.ksan.etfoglasiserver.repository.SubjectRepo;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import dev.ksan.etfoglasiserver.repository.UserRepo;
|
||||||
|
import org.simplejavamail.api.mailer.Mailer;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
@ -11,6 +17,10 @@ import org.springframework.stereotype.Service;
|
|||||||
public class SubjectService {
|
public class SubjectService {
|
||||||
|
|
||||||
@Autowired SubjectRepo subjectRepo;
|
@Autowired SubjectRepo subjectRepo;
|
||||||
|
@Autowired
|
||||||
|
UserRepo userRepo;
|
||||||
|
@Autowired
|
||||||
|
private UserService userService;
|
||||||
|
|
||||||
public List<Subject> getSubjects() {
|
public List<Subject> getSubjects() {
|
||||||
return subjectRepo.findAll();
|
return subjectRepo.findAll();
|
||||||
@ -50,4 +60,32 @@ public class SubjectService {
|
|||||||
public Subject getSubject(String name) {
|
public Subject getSubject(String name) {
|
||||||
return subjectRepo.findByName(name);
|
return subjectRepo.findByName(name);
|
||||||
}
|
}
|
||||||
|
public Subject findById(UUID id) {
|
||||||
|
return subjectRepo.findById(id).orElseThrow(() -> new RuntimeException("Subject not found"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void notify(Entry entry) {
|
||||||
|
List<User> users = userService.findUsersBySubjectId(entry.getSubject().getId());
|
||||||
|
|
||||||
|
if(users == null || users.isEmpty()) return;
|
||||||
|
for(User user : users) {
|
||||||
|
if(user.getNotificationMethod() == NotificationMethod.EMAIL)
|
||||||
|
this.sendEmailNotification(entry, user);
|
||||||
|
if(user.getNotificationMethod() == NotificationMethod.PUSH_NOTIFICATION)
|
||||||
|
this.sendPushNotification(entry, user);
|
||||||
|
System.out.println(user.getEmail());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendEmailNotification(Entry entry,User user) {
|
||||||
|
|
||||||
|
MailService mail = new MailService(".creds");
|
||||||
|
mail.sendEmail(user.getEmail(),entry.getTitle(),entry.getParagraph());
|
||||||
|
}
|
||||||
|
|
||||||
|
//todo
|
||||||
|
public void sendPushNotification(Entry entry,User user) {
|
||||||
|
System.out.println("Sending push notification");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package dev.ksan.etfoglasiserver.service;
|
package dev.ksan.etfoglasiserver.service;
|
||||||
|
|
||||||
import dev.ksan.etfoglasiserver.dto.UserCreationDTO;
|
import dev.ksan.etfoglasiserver.dto.UserCreationDTO;
|
||||||
|
import dev.ksan.etfoglasiserver.model.NotificationMethod;
|
||||||
import dev.ksan.etfoglasiserver.model.User;
|
import dev.ksan.etfoglasiserver.model.User;
|
||||||
import dev.ksan.etfoglasiserver.repository.UserRepo;
|
import dev.ksan.etfoglasiserver.repository.UserRepo;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -28,19 +29,12 @@ public class UserService {
|
|||||||
if (userRepo.findByEmail(user.getEmail()).isPresent()) {
|
if (userRepo.findByEmail(user.getEmail()).isPresent()) {
|
||||||
throw new RuntimeException("User already exists");
|
throw new RuntimeException("User already exists");
|
||||||
}
|
}
|
||||||
if (this.isValidEmail(user.getEmail())) {
|
if (this.isValidEmail(user.getEmail()) && this.isValidPassword(user.getPassword())) {
|
||||||
userRepo.save(new User(user));
|
userRepo.save(new User(user));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addUser(User user) {
|
|
||||||
if (userRepo.findByEmail(user.getEmail()).isPresent()) {
|
|
||||||
throw new RuntimeException("User already exists");
|
|
||||||
}
|
|
||||||
if (this.isValidEmail(user.getEmail())) {
|
|
||||||
userRepo.save(user);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateUser(UserCreationDTO user) {
|
public void updateUser(UserCreationDTO user) {
|
||||||
Optional<User> existingUserOpt = userRepo.findByEmail(user.getEmail());
|
Optional<User> existingUserOpt = userRepo.findByEmail(user.getEmail());
|
||||||
@ -51,10 +45,14 @@ public class UserService {
|
|||||||
|
|
||||||
if (this.isValidEmail(user.getEmail())) {
|
if (this.isValidEmail(user.getEmail())) {
|
||||||
|
|
||||||
if (this.isValidPassword(user.getPassword())) {
|
User existingUser = existingUserOpt.get();
|
||||||
User existingUser = existingUserOpt.get();
|
if(user.getPassword() != null && user.getPassword().length() > 0) {
|
||||||
|
|
||||||
|
if (this.isValidPassword(user.getPassword())) {
|
||||||
|
|
||||||
|
existingUser.setPassword(user.getPassword());
|
||||||
|
}else throw new RuntimeException("Password too short");
|
||||||
|
}
|
||||||
if(user.getNewEmail() != null && user.getNewEmail() != existingUser.getEmail()) {
|
if(user.getNewEmail() != null && user.getNewEmail() != existingUser.getEmail()) {
|
||||||
|
|
||||||
existingUser.setEmail(user.getNewEmail());
|
existingUser.setEmail(user.getNewEmail());
|
||||||
@ -64,20 +62,14 @@ public class UserService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
existingUser.setPassword(user.getPassword());
|
existingUser.setSubjectSet(user.getSubjectSet());
|
||||||
|
existingUser.setNotificationMethod(user.getNotificationMethod());
|
||||||
userRepo.save(existingUser);
|
userRepo.save(existingUser);
|
||||||
} else throw new RuntimeException("Password too short");
|
|
||||||
} else throw new RuntimeException("Invalid email");
|
} else throw new RuntimeException("Invalid email");
|
||||||
} else throw new RuntimeException("User not found");
|
} else throw new RuntimeException("User not found");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateUser(User user) {
|
|
||||||
|
|
||||||
if (this.isValidEmail(user.getEmail())) {
|
|
||||||
|
|
||||||
userRepo.save(user);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void deleteUser(UUID userId) {
|
public void deleteUser(UUID userId) {
|
||||||
userRepo.deleteById(userId);
|
userRepo.deleteById(userId);
|
||||||
@ -98,4 +90,11 @@ public class UserService {
|
|||||||
public boolean isValidPassword(String pass) {
|
public boolean isValidPassword(String pass) {
|
||||||
return pass.length() >= 8;
|
return pass.length() >= 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<User> findUsersBySubjectId(UUID id) {
|
||||||
|
List<User> users = userRepo.findUsersBySubjectId(id);
|
||||||
|
if (users.isEmpty()) return null;
|
||||||
|
return users;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user