diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/RoomController.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/RoomController.java index c60d45b..7d23922 100644 --- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/RoomController.java +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/RoomController.java @@ -4,6 +4,8 @@ import ch.usi.inf.sa4.sanmarinoes.smarthut.models.*; import java.util.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.*; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; import org.springframework.web.bind.annotation.*; @RestController @@ -13,6 +15,8 @@ public class RoomController { @Autowired private RoomRepository roomRepository; + @Autowired private UserRepository userRepository; + @GetMapping public Iterable findAll() { return roomRepository.findAll(); @@ -25,6 +29,19 @@ public class RoomController { @PostMapping public Room save(@RequestBody Room r) { + final Object principal = + SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + + if (!(principal instanceof UserDetails)) { + throw new IllegalStateException("User is not logged in"); + } + + final String username = ((UserDetails) principal).getUsername(); + final Long userId = userRepository.findByUsername(username).getId(); + + r.setUserId(userId); + r.setUser(null); + return roomRepository.save(r); } diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Device.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Device.java index d6108e8..3ec45b9 100644 --- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Device.java +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Device.java @@ -21,9 +21,16 @@ public abstract class Device { /** The room this device belongs in */ @ManyToOne - @JoinColumn(name = "room_id") + @JoinColumn(name = "room_id", nullable = false, updatable = false, insertable = false) private Room room; + /** + * The room this device belongs in, as a foreign key id. To use when updating and inserting from + * a REST call. + */ + @Column(name = "room_id") + private Long roomId; + /** The name of the device as assigned by the user (e.g. 'Master bedroom light') */ @Column private String name; diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Room.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Room.java index 6f36557..f297927 100644 --- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Room.java +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Room.java @@ -18,21 +18,28 @@ public class Room { * https://www.baeldung.com/java-base64-image-string * https://docs.oracle.com/javase/8/docs/api/java/util/Base64.html */ - @Column(name = "icon", updatable = true, nullable = false) + @Column(name = "icon", nullable = false) private byte[] icon; - @Column(name = "image", updatable = true, nullable = false) + @Column(name = "image", nullable = false) private byte[] image; /** User that owns the house this room is in */ @ManyToOne - @JoinColumn(name = "user_id") + @JoinColumn(name = "user_id", nullable = false, updatable = false, insertable = false) private User user; + /** + * User that owns the house this room is in as a foreign key id. To use when updating and + * inserting from a REST call. + */ + @Column(name = "user_id") + private Long userId; + /** The user given name of this room (e.g. 'Master bedroom') */ @Column private String name; - /** Collectiion of devices present in this room */ + /** Collection of devices present in this room */ @OneToMany(mappedBy = "room") private Set devices; @@ -44,6 +51,14 @@ public class Room { this.id = id; } + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + public User getUser() { return user; } @@ -66,16 +81,6 @@ public class Room { @Override public String toString() { - return "Room{" - + "id=" - + id - + ", user=" - + user - + ", name='" - + name - + '\'' - + ", devices=" - + devices - + '}'; + return "Room{" + "id=" + id + ", user=" + user + ", name='" + name + "\'}"; } }