Skip to content

Commit e9c8d79

Browse files
author
Anand Rajneesh
committed
[#3] MongoDB Implementation
1 parent d4f0594 commit e9c8d79

File tree

10 files changed

+170
-46
lines changed

10 files changed

+170
-46
lines changed

pom.xml

+23-1
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
1414
<java.version>1.8</java.version>
1515
<spring.version>1.5.4.RELEASE</spring.version>
16+
<nosqlunit.version>0.7.6</nosqlunit.version>
1617
</properties>
1718

18-
1919
<dependencies>
2020
<dependency>
2121
<groupId>org.springframework.boot</groupId>
@@ -49,6 +49,11 @@
4949
<artifactId>spring-boot-starter-log4j2</artifactId>
5050
<version>${spring.version}</version>
5151
</dependency>
52+
<dependency>
53+
<groupId>org.springframework.boot</groupId>
54+
<artifactId>spring-boot-starter-data-mongodb</artifactId>
55+
<version>${spring.version}</version>
56+
</dependency>
5257
<dependency>
5358
<groupId>io.springfox</groupId>
5459
<artifactId>springfox-swagger2</artifactId>
@@ -59,6 +64,23 @@
5964
<artifactId>springfox-swagger-ui</artifactId>
6065
<version>2.7.0</version>
6166
</dependency>
67+
<dependency>
68+
<groupId>com.fasterxml.jackson.datatype</groupId>
69+
<artifactId>jackson-datatype-jsr310</artifactId>
70+
<version>2.8.6</version>
71+
</dependency>
72+
<dependency>
73+
<groupId>com.github.fakemongo</groupId>
74+
<artifactId>fongo</artifactId>
75+
<version>2.0.6</version>
76+
<scope>test</scope>
77+
</dependency>
78+
<dependency>
79+
<groupId>com.lordofthejars</groupId>
80+
<artifactId>nosqlunit-mongodb</artifactId>
81+
<version>${nosqlunit.version}</version>
82+
<scope>test</scope>
83+
</dependency>
6284
</dependencies>
6385

6486
<build>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package org.gluecoders.library.config;
2+
3+
import com.mongodb.BasicDBObject;
4+
import org.springframework.beans.factory.annotation.Autowired;
5+
import org.springframework.context.annotation.Bean;
6+
import org.springframework.context.annotation.Configuration;
7+
import org.springframework.core.convert.converter.Converter;
8+
import org.springframework.data.mongodb.MongoDbFactory;
9+
import org.springframework.data.mongodb.core.convert.CustomConversions;
10+
11+
import java.time.YearMonth;
12+
import java.util.Arrays;
13+
14+
/**
15+
* Created by Anand_Rajneesh on 6/14/2017.
16+
*/
17+
@Configuration
18+
public class Database{
19+
20+
public enum YearMonthConverter implements Converter<BasicDBObject, YearMonth> {
21+
INSTANCE;
22+
23+
private YearMonthConverter(){}
24+
25+
@Override
26+
public YearMonth convert(BasicDBObject source) {
27+
return YearMonth.of(
28+
(int) source.get("year"),
29+
(int) source.get("month")
30+
);
31+
}
32+
}
33+
34+
@Bean
35+
public CustomConversions customConversions(){
36+
return new CustomConversions(Arrays.asList(YearMonthConverter.INSTANCE));
37+
}
38+
39+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.gluecoders.library.config;
2+
3+
import org.springframework.context.annotation.Bean;
4+
import org.springframework.context.annotation.Configuration;
5+
import springfox.documentation.builders.PathSelectors;
6+
import springfox.documentation.builders.RequestHandlerSelectors;
7+
import springfox.documentation.spi.DocumentationType;
8+
import springfox.documentation.spring.web.plugins.Docket;
9+
import springfox.documentation.swagger2.annotations.EnableSwagger2;
10+
11+
/**
12+
* Created by Anand_Rajneesh on 6/13/2017.
13+
*/
14+
@Configuration
15+
@EnableSwagger2
16+
public class Swagger {
17+
18+
@Bean
19+
public Docket swaggerSpringMvcPlugin() {
20+
return new Docket(DocumentationType.SWAGGER_2)
21+
.select()
22+
.apis(RequestHandlerSelectors.any())
23+
.paths(PathSelectors.any())
24+
.build();
25+
}
26+
}

src/main/java/org/gluecoders/library/config/SwaggerConfig.java

-25
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.gluecoders.library.dao;
2+
3+
import org.gluecoders.library.models.Book;
4+
import org.springframework.data.mongodb.repository.MongoRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
/**
8+
* Created by Anand_Rajneesh on 6/14/2017.
9+
*/
10+
@Repository
11+
public interface BookDao extends MongoRepository<Book, String> {
12+
13+
Book findDistinctByIsbnCode(long isbnCode);
14+
}

src/main/java/org/gluecoders/library/models/Book.java

+29-11
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,42 @@
11
package org.gluecoders.library.models;
22

3+
import com.fasterxml.jackson.annotation.JsonIgnore;
4+
import org.springframework.data.annotation.Id;
5+
import org.springframework.data.mongodb.core.mapping.Document;
6+
37
import java.io.Serializable;
8+
import java.time.Month;
9+
import java.time.YearMonth;
410
import java.util.Arrays;
511
import java.util.List;
612

713
/**
814
* Created by Anand_Rajneesh on 6/10/2017.
915
*/
16+
@Document(collection = "books")
1017
public class Book implements Serializable {
1118

19+
@Id @JsonIgnore
20+
private String id;
1221
private String title;
1322
private String author;
14-
private int publishedYear;
23+
private YearMonth publishedYear;
1524
private List<String> categories;
1625
private String publisher;
1726
private long isbnCode;
1827

28+
1929
public Book() {
2030
}
2131

32+
public String getId() {
33+
return id;
34+
}
35+
36+
public void setId(String id) {
37+
this.id = id;
38+
}
39+
2240
public String getTitle() {
2341
return title;
2442
}
@@ -59,14 +77,6 @@ public void setIsbnCode(long isbnCode) {
5977
this.isbnCode = isbnCode;
6078
}
6179

62-
public int getPublishedYear() {
63-
return publishedYear;
64-
}
65-
66-
public void setPublishedYear(int publishedYear) {
67-
this.publishedYear = publishedYear;
68-
}
69-
7080
@Override
7181
public boolean equals(Object obj) {
7282
return obj != null && obj instanceof Book && Long.compare(isbnCode, ((Book) obj).getIsbnCode()) == 0;
@@ -81,6 +91,14 @@ public static Builder builder(){
8191
return new Builder();
8292
}
8393

94+
public YearMonth getPublishedYear() {
95+
return publishedYear;
96+
}
97+
98+
public void setPublishedYear(YearMonth publishedYear) {
99+
this.publishedYear = publishedYear;
100+
}
101+
84102
public static class Builder{
85103

86104
private Book book = new Book();
@@ -100,8 +118,8 @@ public Builder isbn(long isbnCode){
100118
return this;
101119
}
102120

103-
public Builder yearOfPublishing(int year){
104-
book.setPublishedYear(year);
121+
public Builder yearOfPublishing(int year, Month month){
122+
book.setPublishedYear(YearMonth.of(year, month));
105123
return this;
106124
}
107125

src/main/java/org/gluecoders/library/rest/Books.java

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import org.springframework.http.ResponseEntity;
1212
import org.springframework.web.bind.annotation.*;
1313

14+
import java.time.Month;
15+
import java.util.ArrayList;
1416
import java.util.List;
1517

1618
/**
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package org.gluecoders.library.services;
22

3+
import org.gluecoders.library.dao.BookDao;
34
import org.gluecoders.library.models.Book;
5+
import org.slf4j.Logger;
6+
import org.slf4j.LoggerFactory;
7+
import org.springframework.beans.factory.annotation.Autowired;
48
import org.springframework.stereotype.Component;
59

6-
import java.util.Collections;
710
import java.util.List;
811

912
/**
@@ -12,24 +15,35 @@
1215
@Component
1316
public class DefaultBookService implements BookService {
1417

18+
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultBookService.class);
19+
20+
@Autowired
21+
private BookDao bookDao;
1522

1623
@Override
1724
public List<Book> getAllBooks() {
18-
return Collections.emptyList();
25+
LOGGER.info("getAllBooks() invoked");
26+
return bookDao.findAll();
1927
}
2028

2129
@Override
2230
public Book addBook(Book book) {
23-
return book;
31+
LOGGER.info("Adding book {} to library",book);
32+
return bookDao.save(book);
2433
}
2534

2635
@Override
2736
public Book getBookByISBN(long isbn) {
28-
return null;
37+
LOGGER.info("Get Book by ISBN {}", isbn);
38+
return bookDao.findDistinctByIsbnCode(isbn);
2939
}
3040

3141
@Override
3242
public void deleteBook(long isbn) {
33-
43+
LOGGER.info("Delete book by isbn {}",isbn);
44+
Book book = bookDao.findDistinctByIsbnCode(isbn);
45+
if(book != null) {
46+
bookDao.delete(book);
47+
}
3448
}
3549
}

src/main/resources/log4j2.xml

+1-4
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,13 @@
22
<Configuration status="WARN">
33
<Appenders>
44
<Console name="Console" target="SYSTEM_OUT">
5-
<JsonLayout compact="true" eventEol="true"/>
5+
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
66
</Console>
77
</Appenders>
88
<Loggers>
99
<logger name="org.gluecoders.library" level="debug" additivity="false">
1010
<AppenderRef ref="Console"/>
1111
</logger>
12-
<logger name="org.springframework" level="error" additivity="false">
13-
<AppenderRef ref="Console"/>
14-
</logger>
1512
<Root level="info">
1613
<AppenderRef ref="Console"/>
1714
</Root>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.gluecoders.library.config;
2+
3+
import org.junit.Test;
4+
import org.junit.runner.RunWith;
5+
import org.junit.runners.BlockJUnit4ClassRunner;
6+
import static org.junit.Assert.*;
7+
/**
8+
* Created by Anand_Rajneesh on 6/14/2017.
9+
*/
10+
@RunWith(BlockJUnit4ClassRunner.class)
11+
public class SwaggerTest {
12+
13+
@Test
14+
public void testSwaggerSpringMvcPlugin(){
15+
assertNotNull(new Swagger().swaggerSpringMvcPlugin());
16+
}
17+
}

0 commit comments

Comments
 (0)