From aeaeddc25b56f7f2de75c65fe99bfe72da1daa02 Mon Sep 17 00:00:00 2001 From: Tamas Bunth <tamas.bunth@collabora.co.uk> Date: Wed, 14 Mar 2018 21:17:51 +0100 Subject: [PATCH] REST: Fix upcoming issues of new fields --- src/main/kotlin/mobildata/model/User.kt | 9 +++++---- .../kotlin/mobildata/model/inout/Register.kt | 16 +++++++++++++--- .../mobildata/model/inout/UpdateUser.kt | 19 +++++++++++++++++++ src/main/kotlin/mobildata/web/UserHandler.kt | 8 ++++---- src/main/resources/schema.sql | 6 +++--- 5 files changed, 44 insertions(+), 14 deletions(-) diff --git a/src/main/kotlin/mobildata/model/User.kt b/src/main/kotlin/mobildata/model/User.kt index b988048..f1368f8 100644 --- a/src/main/kotlin/mobildata/model/User.kt +++ b/src/main/kotlin/mobildata/model/User.kt @@ -8,6 +8,8 @@ import javax.persistence.* // user should be quoted, because this keyword might be resolved in // various DBMS's (e.g. postgresql) +//@ManyToMany: use for list fields + @Entity //@JsonRootName("user") @Table(name = "\"user\"") @@ -15,11 +17,10 @@ data class User(var email: String = "", @JsonIgnore var password: String = "", var token: String = "", - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/mm/yyyy") var birthDate: Date = Date(), + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/mm/yyyy") + var birthDate: Date = Date(), var deviceType: String = "", // TODO type - var androidVersion: String = "", - //@ManyToMany - //@JsonIgnore + var androidVersion: Int? = null, @Id @GeneratedValue(strategy = GenerationType.AUTO) var id: Long = 0) { override fun toString(): String = "User($email)" diff --git a/src/main/kotlin/mobildata/model/inout/Register.kt b/src/main/kotlin/mobildata/model/inout/Register.kt index 8c176ad..caa54d4 100644 --- a/src/main/kotlin/mobildata/model/inout/Register.kt +++ b/src/main/kotlin/mobildata/model/inout/Register.kt @@ -1,8 +1,6 @@ package mobildata.model.inout -import com.fasterxml.jackson.annotation.JsonRootName import io.swagger.annotations.ApiModelProperty -import io.swagger.annotations.Example import javax.validation.constraints.NotNull import javax.validation.constraints.Pattern import javax.validation.constraints.Size @@ -27,8 +25,20 @@ class Register { @ApiModelProperty(example = "16/01/1996", required = false) var birthDate: String? = "" - constructor(email: String?, password: String?) { + // TODO integer validation + @ApiModelProperty(example = "28", required = false) + var androidVersion: Int? = null + + @Size(min = 1, max = 500, message = "invalid field size") + @ApiModelProperty(example = "Samsung Galaxy blabla bla", required = false) + var deviceType: String? = "" + + constructor(email: String?, password: String?, birthDate: String? = null, androidVersion: Int? = null, + deviceType: String? = null) { this.email = email this.password = password + this.birthDate = birthDate + this.androidVersion = androidVersion + this.deviceType = deviceType } } \ No newline at end of file diff --git a/src/main/kotlin/mobildata/model/inout/UpdateUser.kt b/src/main/kotlin/mobildata/model/inout/UpdateUser.kt index ea06930..af7883a 100644 --- a/src/main/kotlin/mobildata/model/inout/UpdateUser.kt +++ b/src/main/kotlin/mobildata/model/inout/UpdateUser.kt @@ -17,5 +17,24 @@ class UpdateUser { @ApiModelProperty(example = "16/01/1996", required = false) var birthDate: String? = "" + @Size(min = 1, message = "can't be empty") + @Pattern(regexp = "([1-9]\\d)", message = "must be a valid andoid API level") + @ApiModelProperty(example = "28", required = false) + var androidVersion: Int? = null + + @Size(min = 1, max = 500, message = "invalid field size") + @ApiModelProperty(example = "Samsung Galaxy blabla bla", required = false) + var deviceType: String? = "" + + var password: String? = null + + constructor(email: String?, password: String?, birthDate: String? = null, androidVersion: Int? = null, + deviceType: String? = null) { + this.email = email + this.password = password + this.birthDate = birthDate + this.androidVersion = androidVersion + this.deviceType = deviceType + } } \ No newline at end of file diff --git a/src/main/kotlin/mobildata/web/UserHandler.kt b/src/main/kotlin/mobildata/web/UserHandler.kt index d907c2b..635280b 100644 --- a/src/main/kotlin/mobildata/web/UserHandler.kt +++ b/src/main/kotlin/mobildata/web/UserHandler.kt @@ -52,7 +52,7 @@ class UserHandler(val repository: UserRepository, val date = service.createDate(register.birthDate) ?: Date(); val user = User(email = register.email!!, password = BCrypt.hashpw(register.password, BCrypt.gensalt()), - birthDate = date) + birthDate = date, deviceType = register.deviceType ?: "", androidVersion = register.androidVersion) user.token = service.newToken(user) val saved = repository.save(user) @@ -62,7 +62,7 @@ class UserHandler(val repository: UserRepository, @ApiKeySecured @GetMapping("/api/user") - fun currentUser() = view(service.currentUser()) + fun currentUser() = service.currentUser() @ApiKeySecured @PutMapping("/api/user") @@ -87,7 +87,8 @@ class UserHandler(val repository: UserRepository, // update the user val u = currentUser.copy(email = user.email ?: currentUser.email, - password = BCrypt.hashpw(user.password, BCrypt.gensalt()), birthDate = date) + password = BCrypt.hashpw(user.password, BCrypt.gensalt()), birthDate = date, + deviceType = user.deviceType ?: "", androidVersion = user.androidVersion) // update token only if email changed if (currentUser.email != u.email) { u.token = service.newToken(u) @@ -104,5 +105,4 @@ class UserHandler(val repository: UserRepository, } } - fun view(user: User) = mapOf("user" to user) } \ No newline at end of file diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql index 9fde62b..15c0570 100644 --- a/src/main/resources/schema.sql +++ b/src/main/resources/schema.sql @@ -13,12 +13,12 @@ create sequence hibernate_sequence start 1 increment 1; create table "user" ( id int8 not null, - bio varchar(255), email varchar(255), - image varchar(255), password varchar(255), token varchar(255), - username varchar(255), + android_version INTEGER, + birth_date TIMESTAMP, + device_type VARCHAR(255), primary key (id) ); -- GitLab