indev
This commit is contained in:
parent
f14d41f04d
commit
0b9227a822
@ -13,10 +13,12 @@ import org.springframework.web.bind.annotation.ResponseStatus;
|
|||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
import ovh.herisson.Clyde.Repositories.NotificationRepository;
|
||||||
import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
|
import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
|
||||||
import ovh.herisson.Clyde.Services.AuthenticatorService;
|
import ovh.herisson.Clyde.Services.AuthenticatorService;
|
||||||
import ovh.herisson.Clyde.Tables.Notification;
|
import ovh.herisson.Clyde.Tables.Notification;
|
||||||
import ovh.herisson.Clyde.Tables.User;
|
import ovh.herisson.Clyde.Tables.User;
|
||||||
|
import ovh.herisson.Clyde.Tables.Notification.Status;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@ -24,6 +26,7 @@ import ovh.herisson.Clyde.Tables.User;
|
|||||||
public class NotificationController {
|
public class NotificationController {
|
||||||
|
|
||||||
private AuthenticatorService authServ;
|
private AuthenticatorService authServ;
|
||||||
|
private NotificationRepository notifRepo;
|
||||||
|
|
||||||
@GetMapping("/notifications")
|
@GetMapping("/notifications")
|
||||||
public ResponseEntity<List<Notification>> getNotifications(@RequestHeader("Authorization") String token){
|
public ResponseEntity<List<Notification>> getNotifications(@RequestHeader("Authorization") String token){
|
||||||
@ -37,8 +40,13 @@ public class NotificationController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/notifications/{id}")
|
@PostMapping("/notifications/{id}")
|
||||||
public ResponseStatus archiveNotification(@RequestHeader("Authorization") String token, @PathVariable long id){
|
public ResponseEntity<Notification> archiveNotification(@RequestHeader("Authorization") String token, @PathVariable long id){
|
||||||
return null;
|
User u = authServ.getUserFromToken(token);
|
||||||
|
Notification n = notifRepo.findById(id).orElse(null);
|
||||||
|
if(u == null || n.getUser() != u){
|
||||||
|
return new UnauthorizedResponse<>(null);
|
||||||
|
}
|
||||||
|
n.setStatus(Status.Archived);
|
||||||
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,5 +4,5 @@ import org.springframework.data.repository.CrudRepository;
|
|||||||
|
|
||||||
import ovh.herisson.Clyde.Tables.Notification;
|
import ovh.herisson.Clyde.Tables.Notification;
|
||||||
|
|
||||||
interface NotificationRepository extends CrudRepository<Notification, Long> {}
|
public interface NotificationRepository extends CrudRepository<Notification, Long> {}
|
||||||
|
|
||||||
|
@ -8,6 +8,8 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
|
|||||||
|
|
||||||
import jakarta.annotation.Nullable;
|
import jakarta.annotation.Nullable;
|
||||||
import jakarta.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.GeneratedValue;
|
||||||
|
import jakarta.persistence.GenerationType;
|
||||||
import jakarta.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import jakarta.persistence.ManyToOne;
|
import jakarta.persistence.ManyToOne;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@ -18,12 +20,14 @@ import lombok.NoArgsConstructor;
|
|||||||
@Entity
|
@Entity
|
||||||
public class Notification {
|
public class Notification {
|
||||||
|
|
||||||
private enum Status {
|
public enum Status {
|
||||||
Unread,
|
Unread,
|
||||||
Read,
|
Read,
|
||||||
|
Archived
|
||||||
}
|
}
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||||
private int id;
|
private int id;
|
||||||
|
|
||||||
private String subject;
|
private String subject;
|
||||||
|
@ -9,6 +9,7 @@ import org.hibernate.annotations.OnDeleteAction;
|
|||||||
import org.hibernate.annotations.GenericGenerator;
|
import org.hibernate.annotations.GenericGenerator;
|
||||||
import ovh.herisson.Clyde.Tables.Msg.Discussion;
|
import ovh.herisson.Clyde.Tables.Msg.Discussion;
|
||||||
import ovh.herisson.Clyde.Tables.Msg.Message;
|
import ovh.herisson.Clyde.Tables.Msg.Message;
|
||||||
|
import ovh.herisson.Clyde.Tables.Notification.Status;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -77,4 +78,12 @@ public class User {
|
|||||||
this.password = password;
|
this.password = password;
|
||||||
this.role = Role.Student;
|
this.role = Role.Student;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Notification> getNotifications(){
|
||||||
|
for(Notification n: this.notifications){
|
||||||
|
if(n.getStatus() == Status.Archived)
|
||||||
|
this.notifications.remove(n);
|
||||||
|
}
|
||||||
|
return this.notifications;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -49,17 +49,17 @@ window.addEventListener('hashchange', () => {
|
|||||||
</a></li>
|
</a></li>
|
||||||
<li style="float: right;" title=login>
|
<li style="float: right;" title=login>
|
||||||
<a class="icon" href="#/login">
|
<a class="icon" href="#/login">
|
||||||
<div class="fa-solid fa-user" :style="Logged ? 'color: orange' : ''" style="margin-top: 7px; margin-bottom: 3px; "></div>
|
<div class="fa-solid fa-user" :style="Logged ? 'color: red' : ''" style="margin-top: 7px; margin-bottom: 3px; "></div>
|
||||||
</a></li>
|
</a></li>
|
||||||
<li style="float: right;" title=notifications>
|
<li style="float: right;" title=notifications @click="notification = !notification">
|
||||||
<a class="icon" @click.cancel="notification = !notification">
|
<a class="icon">
|
||||||
<div class="fa-solid fa-bell" :style="notifications.length != 0 ? 'color:orange': '' " style="margin-top: 7px; margin-bottom: 3px;"></div>
|
<div class="fa-solid fa-bell" :style="notifications.length != 0 ? 'color:orange': '' " style="margin-top: 7px; margin-bottom: 3px;"></div>
|
||||||
<ul v-if=notification id="notification">
|
<ul v-if=notification id="notification">
|
||||||
<li v-for="notif in notifications"> {{ i18n(notif.subject) }} - {{ notif.body }}</li>
|
<li v-for="notif in notifications" @click="archiveNotification(notif.id)"> {{ i18n(notif.subject) }} - {{ notif.body }}</li>
|
||||||
</ul>
|
</ul>
|
||||||
</a></li>
|
</a></li>
|
||||||
<li @click="active=!active" class="option"style="float: right;" title=settings>
|
<li @click="active=!active" class="option"style="float: right;" title=settings>
|
||||||
<a class="icon" >
|
<a class="icon">
|
||||||
<div class="fa-solid fa-gear" style="margin-top: 7px; margin-bottom: 3px;"></div>
|
<div class="fa-solid fa-gear" style="margin-top: 7px; margin-bottom: 3px;"></div>
|
||||||
<div v-if="active" class="dropdown">
|
<div v-if="active" class="dropdown">
|
||||||
<div class="dropdown-content">{{i18n("app.language")}}</div>
|
<div class="dropdown-content">{{i18n("app.language")}}</div>
|
||||||
@ -262,6 +262,23 @@ window.addEventListener('hashchange', () => {
|
|||||||
background-color: white;
|
background-color: white;
|
||||||
width: 300px;
|
width: 300px;
|
||||||
height: 600px;
|
height: 600px;
|
||||||
|
border-radius: 10px;
|
||||||
|
margin: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notification > li{
|
||||||
|
color: black;
|
||||||
|
list-style: none;
|
||||||
|
font-size: 0.4em;
|
||||||
|
display: block;
|
||||||
|
background-color: #00FF00A0;
|
||||||
|
margin: 1px;
|
||||||
|
border-radius: 42px;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notification > li:hover{
|
||||||
|
background-color: #00FF0000
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
Loading…
Reference in New Issue
Block a user