Skip to content

Commit 9e4c497

Browse files
feat: implements last login of user to any of them when logging
1 parent 3cb4a47 commit 9e4c497

5 files changed

Lines changed: 35 additions & 17 deletions

File tree

src/main/java/com/vianavitor/simplelibrarygame/repository/aux/LoggableUser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public interface LoggableUser {
1111
// used to get the user's hashed password based on the unique username
1212
Optional<UserInfo> getIdAndPasswordByUsername(String username);
1313

14-
// Optional<User> findByUsername(String username);
14+
Optional<User> findByUsername(String username);
1515

1616
boolean existsByUsername(String username);
1717

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package com.vianavitor.simplelibrarygame.service;
22

33
import com.vianavitor.simplelibrarygame.dto.utils.UserInfo;
4+
import com.vianavitor.simplelibrarygame.model.Administrator;
45
import com.vianavitor.simplelibrarygame.repository.AdministratorRepository;
56
import org.springframework.beans.factory.annotation.Autowired;
67
import org.springframework.security.crypto.password.PasswordEncoder;
78
import org.springframework.stereotype.Service;
89

10+
import java.time.LocalDate;
11+
912
@Service
1013
public class AdministratorService {
1114
@Autowired
@@ -15,24 +18,27 @@ public class AdministratorService {
1518
private PasswordEncoder encoder;
1619

1720
public Long login(String username, String password) {
18-
UserInfo userInfo = repository.getIdAndPasswordByUsername(username)
21+
Administrator administrator = (Administrator) repository.findByUsername(username)
1922
.orElseThrow(() -> new RuntimeException("invalid username or password"));
2023

21-
boolean invalidPassword = encoder.matches(password, userInfo.password());
24+
boolean invalidPassword = encoder.matches(password, administrator.getPassword());
2225

2326
if (invalidPassword) {
2427
throw new RuntimeException("invalid username or password");
2528
}
2629

27-
boolean wasUserDeactivated = userInfo.active();
30+
boolean wasUserDeactivated = administrator.isActive();
2831
if (wasUserDeactivated) {
2932
throw new RuntimeException("this user was deactivated, talk with a professor or administrador to get more information");
3033
}
3134

3235
// TODO: create JWT Token for authentication
3336
// ...
3437

35-
return userInfo.id();
38+
administrator.setLastLogin(LocalDate.now());
39+
repository.save(administrator);
40+
41+
return administrator.getId();
3642
}
3743

3844
}

src/main/java/com/vianavitor/simplelibrarygame/service/LibrarianService.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.springframework.security.crypto.password.PasswordEncoder;
99
import org.springframework.stereotype.Service;
1010

11+
import java.time.LocalDate;
1112
import java.util.List;
1213

1314
@Service
@@ -34,24 +35,27 @@ public Librarian register(Librarian entity) {
3435

3536
@Override
3637
public Long login(String username, String password) {
37-
UserInfo userInfo = repository.getIdAndPasswordByUsername(username)
38+
Librarian librarian = (Librarian) repository.findByUsername(username)
3839
.orElseThrow(() -> new RuntimeException("invalid username or password"));
3940

40-
boolean invalidPassword = encoder.matches(password, userInfo.password());
41+
boolean invalidPassword = encoder.matches(password, librarian.getPassword());
4142

4243
if (invalidPassword) {
4344
throw new RuntimeException("invalid username or password");
4445
}
4546

46-
boolean wasUserDeactivated = userInfo.active();
47+
boolean wasUserDeactivated = librarian.isActive();
4748
if (wasUserDeactivated) {
4849
throw new RuntimeException("this user was deactivated, talk with a professor or administrador to get more information");
4950
}
5051

5152
// TODO: create JWT Token for authentication
5253
// ...
5354

54-
return userInfo.id();
55+
librarian.setLastLogin(LocalDate.now());
56+
repository.save(librarian);
57+
58+
return librarian.getId();
5559
}
5660

5761
public List<Librarian> getAll() {

src/main/java/com/vianavitor/simplelibrarygame/service/ProfessorService.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.springframework.security.crypto.password.PasswordEncoder;
99
import org.springframework.stereotype.Service;
1010

11+
import java.time.LocalDate;
1112
import java.util.List;
1213

1314
@Service
@@ -40,24 +41,27 @@ public void register(Professor newProfessor, String classroomCode) {
4041

4142
@Override
4243
public Long login(String username, String password) {
43-
UserInfo userInfo = repository.getIdAndPasswordByUsername(username)
44+
Professor professor = (Professor) repository.findByUsername(username)
4445
.orElseThrow(() -> new RuntimeException("invalid username or password"));
4546

46-
boolean invalidPassword = encoder.matches(password, userInfo.password());
47+
boolean invalidPassword = encoder.matches(password, professor.getPassword());
4748

4849
if (invalidPassword) {
4950
throw new RuntimeException("invalid username or password");
5051
}
5152

52-
boolean wasUserDeactivated = userInfo.active();
53+
boolean wasUserDeactivated = professor.isActive();
5354
if (wasUserDeactivated) {
5455
throw new RuntimeException("this user was deactivated, talk with a professor or administrador to get more information");
5556
}
5657

5758
// TODO: create JWT Token for authentication
5859
// ...
5960

60-
return userInfo.id();
61+
professor.setLastLogin(LocalDate.now());
62+
repository.save(professor);
63+
64+
return professor.getId();
6165
}
6266

6367
private List<Professor> getAll() {

src/main/java/com/vianavitor/simplelibrarygame/service/StudentService.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.springframework.security.crypto.password.PasswordEncoder;
1313
import org.springframework.stereotype.Service;
1414

15+
import java.time.LocalDate;
1516
import java.util.List;
1617
import java.util.Set;
1718

@@ -75,24 +76,27 @@ public StudentStats getStats(Long id) {
7576

7677
@Override
7778
public Long login(String username, String password) {
78-
UserInfo userInfo = repository.getIdAndPasswordByUsername(username)
79+
Student student = (Student) repository.findByUsername(username)
7980
.orElseThrow(() -> new RuntimeException("invalid username or password"));
8081

81-
boolean invalidPassword = encoder.matches(password, userInfo.password());
82+
boolean invalidPassword = encoder.matches(password, student.getPassword());
8283

8384
if (invalidPassword) {
8485
throw new RuntimeException("invalid username or password");
8586
}
8687

87-
boolean wasUserDeactivated = userInfo.active();
88+
boolean wasUserDeactivated = student.isActive();
8889
if (wasUserDeactivated) {
8990
throw new RuntimeException("this user was deactivated, talk with a professor or administrador to get more information");
9091
}
9192

9293
// TODO: create JWT Token for authentication
9394
// ...
9495

95-
return userInfo.id();
96+
student.setLastLogin(LocalDate.now());
97+
repository.save(student);
98+
99+
return student.getId();
96100
}
97101

98102
public List<Student> getAll() {

0 commit comments

Comments
 (0)