Skip to content

Commit d51ed41

Browse files
author
Jony Santos
committed
initial commit
1 parent 2608d55 commit d51ed41

File tree

11 files changed

+79
-100
lines changed

11 files changed

+79
-100
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<groupId>org.springframework.boot</groupId>
1616
<artifactId>spring-boot-starter-parent</artifactId>
17-
<version>2.0.0.M1</version>
17+
<version>1.5.3.RELEASE</version>
1818
<relativePath/> <!-- lookup parent from repository -->
1919
</parent>
2020

src/main/kotlin/br/com/jonyfs/springbootkotlinapi/LoadData.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ class LoadData {
108108
userAdmin.password = "XPTO"
109109
userAdmin.roles = (listOf(roleAdmin))
110110

111-
userRepository.saveAll(listOf(user1, user2, user3, user4, userAdmin))
111+
userRepository.save(listOf(user1, user2, user3, user4, userAdmin))
112112
}
113113

114114
}

src/main/kotlin/br/com/jonyfs/springbootkotlinapi/config/AuditConfig.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import org.springframework.data.domain.AuditorAware
1010
import org.springframework.data.jpa.domain.support.AuditingEntityListener
1111
import org.springframework.data.jpa.repository.config.EnableJpaAuditing
1212
import org.springframework.security.core.context.SecurityContextHolder
13-
import java.util.*
14-
import java.util.Optional.ofNullable
1513

1614
/**
1715
@@ -33,14 +31,14 @@ class AuditingConfig {
3331

3432
class SecurityAuditor : AuditorAware<User> {
3533

36-
override fun getCurrentAuditor(): Optional<User>? {
34+
override fun getCurrentAuditor(): User? {
3735
val auth = SecurityContextHolder.getContext().authentication
3836
if (auth != null) {
3937
if (auth.details is User) {
40-
return ofNullable<User>(auth.details as User)
38+
return auth.details as User
4139
}
4240
}
43-
return Optional.empty()
41+
return null
4442
}
4543
}
4644

src/main/kotlin/br/com/jonyfs/springbootkotlinapi/model/AbstractAuditable.kt

Lines changed: 0 additions & 78 deletions
This file was deleted.

src/main/kotlin/br/com/jonyfs/springbootkotlinapi/model/AuditableEntity.kt

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,31 @@ package br.com.jonyfs.springbootkotlinapi.model
44
* Created by jony on 28/05/17.
55
*/
66
import br.com.jonyfs.springbootkotlinapi.user.User
7+
import org.springframework.data.annotation.CreatedBy
8+
import org.springframework.data.annotation.CreatedDate
9+
import org.springframework.data.annotation.LastModifiedBy
10+
import org.springframework.data.annotation.LastModifiedDate
711
import java.io.Serializable
8-
import javax.persistence.EntityListeners
9-
import javax.persistence.MappedSuperclass
12+
import java.util.*
13+
import javax.persistence.*
1014

1115

1216
@MappedSuperclass
1317
@EntityListeners(org.springframework.data.jpa.domain.support.AuditingEntityListener::class)
14-
abstract class AuditableEntity<PK : Serializable> : AbstractAuditable<User, PK>()
18+
abstract class AuditableEntity : Serializable {
19+
20+
@Id @GeneratedValue(strategy = GenerationType.AUTO)
21+
val id: Long? = null
22+
23+
@CreatedDate
24+
val createdDate: Date? = null
25+
26+
@CreatedBy
27+
val createdBy: User? = null
28+
29+
@LastModifiedDate
30+
val lastModifiedDate: Date? = null
31+
32+
@LastModifiedBy
33+
val lastModifiedBy: User? = null
34+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package br.com.jonyfs.springbootkotlinapi.model
2+
3+
import br.com.jonyfs.springbootkotlinapi.user.User
4+
import java.util.*
5+
6+
/**
7+
* Created by jony on 01/06/17.
8+
*/
9+
interface AuditableProjection {
10+
11+
fun getId(): String
12+
13+
fun getCreatedDate(): Date
14+
15+
fun getCreatedBy(): User
16+
17+
fun getLastModifiedDate(): Date
18+
19+
fun getLastModifiedBy(): User
20+
21+
}

src/main/kotlin/br/com/jonyfs/springbootkotlinapi/model/BaseEntity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ import javax.persistence.MappedSuperclass
88
*/
99

1010
@MappedSuperclass
11-
abstract class BaseEntity : AuditableEntity<Long>()
11+
abstract class BaseEntity : AuditableEntity()

src/main/kotlin/br/com/jonyfs/springbootkotlinapi/model/NamedEntity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import javax.persistence.MappedSuperclass
99
*/
1010

1111
@MappedSuperclass
12-
abstract class NamedEntity : AuditableEntity<Long>() {
12+
abstract class NamedEntity : AuditableEntity() {
1313

1414
@NotEmpty
1515
var name: String? = null

src/main/kotlin/br/com/jonyfs/springbootkotlinapi/user/UserProjection.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package br.com.jonyfs.springbootkotlinapi.user
22

3+
import br.com.jonyfs.springbootkotlinapi.group.Group
4+
import br.com.jonyfs.springbootkotlinapi.model.AuditableProjection
5+
import br.com.jonyfs.springbootkotlinapi.role.Role
36
import org.springframework.beans.factory.annotation.Value
47
import org.springframework.data.rest.core.config.Projection
58

@@ -8,14 +11,18 @@ import org.springframework.data.rest.core.config.Projection
811
*/
912

1013
@Projection(name = "virtual", types = arrayOf(User::class))
11-
interface UserProjection {
14+
interface UserProjection : AuditableProjection {
1215

1316
fun getFirstName(): String
1417

1518
fun getLastName(): String
1619

1720
fun getEmail(): String
1821

22+
fun getGroups(): Group
23+
24+
fun getRoles(): Role
25+
1926
@get:Value("#{target.firstName} #{target.lastName}")
2027
val fullName: String
2128

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
security.basic.enabled=false
2-
spring.jackson.date-format=yyyy-MM-dd'T'HH:mm:ss.SSSZ
3-
spring.jackson.serialization-inclusion=non_null
42

3+
spring.jackson.date-format=yyyy-MM-dd'T'HH:mm:ss.SSSZ
4+
spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
5+
spring.jackson.default-property-inclusion=non_null

src/test/kotlin/br/com/jonyfs/springbootkotlinapi/SpringBootKotlinApiApplicationTests.kt

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@ import org.junit.Test
99
import org.junit.runner.RunWith
1010
import org.springframework.beans.factory.annotation.Autowired
1111
import org.springframework.boot.test.context.SpringBootTest
12-
import org.springframework.boot.test.json.JacksonTester
1312
import org.springframework.boot.test.web.client.TestRestTemplate
1413
import org.springframework.context.ApplicationContext
14+
import org.springframework.http.HttpEntity
15+
import org.springframework.http.HttpStatus
1516
import org.springframework.http.ResponseEntity
1617
import org.springframework.test.context.junit4.SpringRunner
18+
import org.springframework.util.LinkedMultiValueMap
1719
import javax.annotation.Resource
1820

1921

@@ -36,10 +38,6 @@ class SpringBootKotlinApiApplicationTests {
3638
@Resource
3739
lateinit var privilegeRepository: PrivilegeRepository
3840

39-
@Autowired
40-
private val json: JacksonTester<User>? = null
41-
42-
4341
@Test
4442
fun testIfContextLoads() {
4543
assertThat(applicationContext).isNotNull()
@@ -79,12 +77,14 @@ class SpringBootKotlinApiApplicationTests {
7977

8078
assertThat(response).isNotNull()
8179

80+
assertThat(response.statusCode).isEqualTo(HttpStatus.OK)
81+
8282
var savedUser = response.body
8383

8484
assertThat(savedUser).isNotNull()
8585
assertThat(savedUser.firstName).isNotNull()
86-
87-
86+
assertThat(savedUser.createdDate).isNotNull()
87+
assertThat(savedUser.lastModifiedDate).isNotNull()
8888
}
8989

9090
@Test
@@ -96,11 +96,21 @@ class SpringBootKotlinApiApplicationTests {
9696
user2.email = "john.silva@test.com"
9797
user2.password = "XPTO"
9898

99+
val map = LinkedMultiValueMap<String, Any>()
100+
map.add("firstName", "John")
101+
map.add("lastName", "Silva")
102+
map.add("email", "john.silva@test.com")
103+
map.add("password", "XPTO")
104+
105+
val request = HttpEntity(user2)
99106
var response: ResponseEntity<User> = restTemplate.postForEntity("/users", user2, User::class.java)
100107

101108
assertThat(response.body).isNotNull()
109+
assertThat(response.statusCode).isEqualTo(HttpStatus.CREATED)
102110
assertThat(response.body.firstName).isEqualTo(user2.firstName)
103111
assertThat(response.headers["location"]).isNotNull
112+
assertThat(response.body.createdDate).isNotNull()
113+
assertThat(response.body.lastModifiedDate).isNotNull()
104114

105115
}
106116

0 commit comments

Comments
 (0)