File tree

13 files changed

+223
-39
lines changed

13 files changed

+223
-39
lines changed
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ dependencies {
2727
compile 'org.springframework.boot:spring-boot-starter-web'
2828
compile 'org.junit.vintage:junit-vintage-engine'
2929
implementation 'org.springframework.boot:spring-boot-starter-validation:2.4.0'
30-
30+
compile 'io.springfox:springfox-swagger2:2.7.0'
31+
compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.7.0'
3132

3233

3334
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.urunov.mongodb.configSwag;
2+
3+
import org.springframework.context.annotation.Bean;
4+
import org.springframework.context.annotation.Configuration;
5+
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
6+
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
7+
import springfox.documentation.builders.ApiInfoBuilder;
8+
import springfox.documentation.builders.RequestHandlerSelectors;
9+
import springfox.documentation.service.ApiInfo;
10+
import springfox.documentation.service.Contact;
11+
import springfox.documentation.spi.DocumentationType;
12+
import springfox.documentation.spring.web.plugins.Docket;
13+
import springfox.documentation.swagger2.annotations.EnableSwagger2;
14+
15+
import static springfox.documentation.builders.PathSelectors.regex;
16+
17+
@Configuration
18+
@EnableSwagger2
19+
public class SwaggerConfig extends WebMvcConfigurationSupport {
20+
//
21+
22+
@Bean
23+
public Docket postsApi() {
24+
25+
return new Docket(DocumentationType.SWAGGER_2)
26+
.select()
27+
.apis(RequestHandlerSelectors.basePackage("com.urunov.mongodb.controller"))
28+
.paths(regex("/api/v1.*"))
29+
.build()
30+
.apiInfo(metaData());
31+
}
32+
33+
private ApiInfo metaData() {
34+
return new ApiInfoBuilder()
35+
.title("Spring Boot REST API with Swagger")
36+
.description("\"Spring Boot REST API for Employee")
37+
.version("1.0.0")
38+
.license("Apache License Version 2.0")
39+
.licenseUrl("https://www.apache.org/licenses/LICENSE-2.0\"")
40+
.contact(new Contact("Urunov Hamdamboy", "https://.com/urunov/", "[email protected]"))
41+
.build();
42+
}
43+
@Override
44+
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
45+
registry.addResourceHandler("swagger-ui.html")
46+
.addResourceLocations("classpath:/META-INF/resources/");
47+
registry.addResourceHandler("/webjars/**")
48+
.addResourceLocations("classpath:/META-INF/resources/webjars/");
49+
}
50+
51+
}
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
package com.urunov.mongodb.controller;
22

3+
import com.urunov.mongodb.exception.ResourceNotFoundException;
34
import com.urunov.mongodb.model.Employees;
45
import com.urunov.mongodb.repository.MongoDB;
6+
import com.urunov.mongodb.service.SequenceGeneratorService;
57
import org.springframework.beans.factory.annotation.Autowired;
6-
import org.springframework.web.bind.annotation.GetMapping;
7-
import org.springframework.web.bind.annotation.RequestMapping;
8-
import org.springframework.web.bind.annotation.RestController;
8+
import org.springframework.http.ResponseEntity;
9+
import org.springframework.web.bind.annotation.*;
910

11+
import javax.validation.Valid;
12+
import java.util.HashMap;
1013
import java.util.List;
14+
import java.util.Map;
15+
1116

1217
@RestController
1318
@RequestMapping("/api/v1")
@@ -16,9 +21,53 @@ public class EmployeeController {
1621
@Autowired
1722
private MongoDB mongoDB;
1823

19-
@GetMapping("/")
24+
@Autowired
25+
private SequenceGeneratorService sequenceGeneratorService;
26+
27+
@GetMapping("/all")
2028
public List<Employees> getAllEmployee(){
2129
return mongoDB.findAll();
2230
}
2331

32+
33+
@GetMapping("/employee/{id}")
34+
public ResponseEntity <Employees> getEmployeeById(@PathVariable(value = "id") String employeeId) throws ResourceNotFoundException{
35+
Employees employees = mongoDB.findById(employeeId)
36+
.orElseThrow(() -> new ResourceNotFoundException("Employee not found for this id::" + employeeId));
37+
return ResponseEntity.ok().body(employees);
38+
}
39+
40+
@PostMapping("/employees")
41+
public Employees createEmployees(@Valid @RequestBody Employees employees) {
42+
//
43+
employees.setId(sequenceGeneratorService.generateSequence(Employees.SEQUENCE_NAME));
44+
return mongoDB.save(employees);
45+
}
46+
47+
@PutMapping("/employees/{id}")
48+
public ResponseEntity <Employees> updateEmployee(@PathVariable(value = "id") String employeeId, @Valid @RequestBody Employees details) throws ResourceNotFoundException {
49+
//
50+
Employees employees = mongoDB.findById(employeeId)
51+
.orElseThrow(() -> new ResourceNotFoundException("Employee not found this id::" + employeeId));
52+
53+
employees.setName(details.getName());
54+
employees.setPhone(details.getPhone());
55+
employees.setAge(details.getAge());
56+
employees.setPosition(details.getPosition());
57+
final Employees updatedEmployee = mongoDB.save(employees);
58+
return ResponseEntity.ok(updatedEmployee);
59+
}
60+
61+
@DeleteMapping("/employees/{id}")
62+
public Map<String, Boolean> deleteEmployee(@PathVariable(value = "id") String id) throws ResourceNotFoundException {
63+
//
64+
Employees employees = mongoDB.findById(id)
65+
.orElseThrow(() -> new ResourceNotFoundException("Employee not found for this id::" + id));
66+
67+
mongoDB.delete(employees);
68+
Map<String, Boolean> response = new HashMap<>();
69+
response.put("deleted", Boolean.TRUE);
70+
71+
return response;
72+
}
2473
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.urunov.mongodb.controller;
2+
3+
import com.urunov.mongodb.model.Employees;
4+
import com.urunov.mongodb.repository.ProjectsDB;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.web.bind.annotation.GetMapping;
7+
import org.springframework.web.bind.annotation.RequestMapping;
8+
import org.springframework.web.bind.annotation.RestController;
9+
10+
import java.util.List;
11+
12+
@RestController
13+
@RequestMapping("/api/v1")
14+
public class ProjectController {
15+
16+
@Autowired
17+
private ProjectsDB projectsDB;
18+
19+
@GetMapping("/project")
20+
public List<ProjectsDB> getAllProjects(){
21+
return projectsDB.findAll();
22+
}
23+
24+
}
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
import org.springframework.http.HttpStatus;
55

66
@ResponseStatus(value = HttpStatus.NOT_FOUND)
7-
public class ResourceNotFound extends Exception{
7+
public class ResourceNotFoundException extends Exception{
88

99
private static final long serialVersionUID = 1L;
1010

11-
public ResourceNotFound(String message){
11+
public ResourceNotFoundException(String message){
1212
super(message);
1313
}
1414
}
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@
1212
public class DatabaseSequence {
1313
//
1414
private String id;
15-
private long seq;
15+
private String seq;
1616

1717
}
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import lombok.*;
44
import org.springframework.data.annotation.Id;
5+
import org.springframework.data.annotation.Transient;
56
import org.springframework.data.mongodb.core.mapping.Document;
67

78
@Getter
@@ -12,10 +13,11 @@
1213
@Document(collection = "employees")
1314
public class Employees {
1415

15-
// public static final String SEQUENCE_NAME = "users_sequence";
16+
@Transient
17+
public static final String SEQUENCE_NAME = "users_sequence";
1618

1719
@Id
18-
private String _id;
20+
private String id;
1921

2022
private String Name;
2123

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.urunov.mongodb.model;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import lombok.NoArgsConstructor;
6+
import lombok.Setter;
7+
import org.springframework.data.mongodb.core.mapping.Document;
8+
9+
@Getter
10+
@Setter
11+
@NoArgsConstructor
12+
@AllArgsConstructor
13+
@Document(collection = "projects")
14+
public class Projects {
15+
//
16+
private String id;
17+
private String name;
18+
private Double price;
19+
20+
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.urunov.mongodb.repository;
2+
3+
import com.mongodb.client.MongoClient;
4+
import com.mongodb.client.MongoClients;
5+
import com.mongodb.client.MongoCollection;
6+
import com.mongodb.client.MongoDatabase;
7+
import org.bson.Document;
8+
import org.springframework.data.mongodb.repository.MongoRepository;
9+
import org.springframework.stereotype.Repository;
10+
11+
@Repository
12+
public interface ProjectsDB extends MongoRepository<ProjectsDB, String> {
13+
14+
MongoClient mongoClient = MongoClients.create();
15+
MongoDatabase database = mongoClient.getDatabase("crud2employee");
16+
MongoCollection<Document> coll = database.getCollection("projects");
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.urunov.mongodb.service;
2+
3+
import com.urunov.mongodb.model.DatabaseSequence;
4+
import org.springframework.beans.factory.annotation.Autowired;
5+
import org.springframework.data.mongodb.core.MongoOperations;
6+
import org.springframework.data.mongodb.core.query.Query;
7+
import org.springframework.data.mongodb.core.query.Update;
8+
import org.springframework.stereotype.Service;
9+
10+
import java.util.Objects;
11+
12+
import static org.springframework.data.mongodb.core.FindAndModifyOptions.options;
13+
import static org.springframework.data.mongodb.core.query.Criteria.where;
14+
15+
@Service
16+
public class SequenceGeneratorService {
17+
18+
private MongoOperations mongoOperations;
19+
20+
@Autowired
21+
public SequenceGeneratorService(MongoOperations mongoOperations){
22+
this.mongoOperations = mongoOperations;
23+
}
24+
25+
public String generateSequence(String seqName) {
26+
//
27+
DatabaseSequence counter = mongoOperations.findAndModify(Query.query(where("id").is(seqName)),
28+
new Update().inc("seq", 1), options().returnNew(true).upsert(true), DatabaseSequence.class);
29+
return !Objects.isNull(counter) ? counter.getSeq() : "1";
30+
}
31+
}
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11

22
# MongoDB (MongoProperties)
33

4-
spring.data.mongodb.username=username
5-
spring.data.mongodb.password=password
4+
# Create User: login/pwd
5+
6+
spring.data.mongodb.username=urunov
7+
spring.data.mongodb.password=parol!
68
spring.data.mongodb.database=crud2employee
79

810
spring.data.mongodb.port=27017
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
## DB create schema
2+
3+
use crud2employee;
4+
db.createUser(
5+
{
6+
user: "urunov",
7+
pwd: "parol!",
8+
roles : [
9+
{ role: "readWrite", db: "crud2employee" },
10+
{ role: "readWrite", db: "projects" }
11+
]
12+
}
13+
);

0 commit comments

Comments
 (0)