Skip to content

Commit c155e29

Browse files
committed
added basic models,controllers,services,repositories
1 parent 7742bd3 commit c155e29

28 files changed

+833
-174
lines changed

.gitignore

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
.gradle
2-
/build/
2+
build/
3+
4+
# Default ignored files
5+
shelf/
6+
/workspace.xml
7+
.idea/
8+
.idea_modules/
9+
sonarlint/
310

411
# Ignore Gradle GUI config
512
gradle-app.setting

.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"java.configuration.updateBuildConfiguration": "automatic"
3+
}

build.gradle

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,38 @@ plugins {
44
id 'java'
55
}
66

7-
group = 'trycb'
7+
group = 'org.couchbase.quickstart.springdata'
88
version = '0.0.1-SNAPSHOT'
99
sourceCompatibility = '1.8'
1010

1111
repositories {
1212
mavenCentral()
1313
}
1414

15+
// ext {
16+
// swaggerVersion = "3.0.0"
17+
// springWebVersion = "5.3.9"
18+
// }
19+
1520
dependencies {
1621
implementation 'org.springframework.boot:spring-boot-starter-data-couchbase'
1722
implementation 'org.springframework.boot:spring-boot-starter-web'
23+
implementation 'org.springframework.data:spring-data-couchbase'
24+
25+
// lombok
26+
compileOnly 'org.projectlombok:lombok'
27+
annotationProcessor 'org.projectlombok:lombok'
28+
testCompileOnly 'org.projectlombok:lombok'
29+
testAnnotationProcessor 'org.projectlombok:lombok'
30+
31+
// swagger
32+
implementation 'io.swagger.core.v3:swagger-annotations'
33+
implementation 'org.springdoc:springdoc-openapi-ui:1.6.15'
1834

19-
implementation 'org.springdoc:springdoc-openapi-ui:1.6.15'
35+
// implementation "io.springfox:springfox-boot-starter:${swaggerVersion}"
36+
// implementation "io.springfox:springfox-spring-web:${springWebVersion}"
37+
// implementation "io.springfox:springfox-swagger2:${swaggerVersion}"
38+
// implementation "io.springfox:springfox-swagger-ui:${swaggerVersion}"
2039

2140
testImplementation 'org.springframework.boot:spring-boot-starter-test'
2241
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
server.use-forward-headers=true
2+
server.forward-headers-strategy=framework
3+
spring.couchbase.bootstrap-hosts=localhost
4+
spring.couchbase.bucket.name=travel-sample
5+
spring.couchbase.bucket.user=kaustav
6+
spring.couchbase.bucket.password=password
7+
spring.couchbase.scope.name=inventory
8+
spring.mvc.pathmatch.matching-strategy=ant_path_matcher
9+
10+
11+

src/main/java/trycb/ExampleApplication.java renamed to src/main/java/org/couchbase/quickstart/springdata/Application.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package trycb;
1+
package org.couchbase.quickstart.springdata;
22

33
import org.springframework.boot.SpringApplication;
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -10,10 +10,10 @@
1010
* Spring Data with Couchbase.
1111
**/
1212
@SpringBootApplication
13-
public class ExampleApplication {
13+
public class Application {
1414

1515
public static void main(String[] args) {
16-
SpringApplication.run(ExampleApplication.class, args);
16+
SpringApplication.run(Application.class, args);
1717
}
1818

1919
@Bean

src/main/java/trycb/config/CouchbaseConfiguration.java renamed to src/main/java/org/couchbase/quickstart/springdata/config/CouchbaseConfiguration.java

Lines changed: 47 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,35 @@
1-
package trycb.config;
1+
package org.couchbase.quickstart.springdata.config;
2+
3+
import org.springframework.beans.factory.annotation.Value;
4+
import org.springframework.context.annotation.Bean;
5+
import org.springframework.context.annotation.Configuration;
6+
import org.springframework.data.couchbase.config.AbstractCouchbaseConfiguration;
7+
import org.springframework.data.couchbase.repository.config.EnableCouchbaseRepositories;
28

39
import com.couchbase.client.core.msg.kv.DurabilityLevel;
410
import com.couchbase.client.java.Bucket;
511
import com.couchbase.client.java.Cluster;
612
import com.couchbase.client.java.manager.bucket.BucketSettings;
713
import com.couchbase.client.java.manager.bucket.BucketType;
814

9-
import org.springframework.context.annotation.Bean;
10-
import org.springframework.context.annotation.Configuration;
11-
import org.springframework.data.couchbase.config.AbstractCouchbaseConfiguration;
12-
1315
@Configuration
16+
@EnableCouchbaseRepositories
1417
public class CouchbaseConfiguration extends AbstractCouchbaseConfiguration {
15-
public static final String PROFILE_COLLECTION = "profile";
18+
19+
@Value("${spring.couchbase.bootstrap-hosts}")
20+
private String host;
21+
22+
@Value("${spring.couchbase.bucket.user}")
23+
private String username;
24+
25+
@Value("${spring.couchbase.bucket.password}")
26+
private String password;
27+
28+
@Value("${spring.couchbase.bucket.name}")
29+
private String bucket;
30+
31+
@Value("${spring.couchbase.scope.name}")
32+
private String scope;
1633

1734
@Override
1835
public String getConnectionString() {
@@ -21,41 +38,49 @@ public String getConnectionString() {
2138
// return "couchbases://cb.jnym5s9gv4ealbe.cloud.couchbase.com"
2239
// - without ssl validation:
2340
// return "couchbases://cb.jnym5s9gv4ealbe.cloud.couchbase.com?tls=no_verify"
24-
// (replace cb.jnym5s9gv4ealbe.cloud.couchbase.com with your Capella cluster address)
25-
//
26-
return "couchbase://127.0.0.1";
41+
// (replace cb.jnym5s9gv4ealbe.cloud.couchbase.com with your Capella cluster
42+
// address)
43+
44+
return host;
2745
}
2846

2947
@Override
3048
public String getUserName() {
31-
return "Administrator";
49+
return username;
3250
}
3351

3452
@Override
3553
public String getPassword() {
36-
return "password";
54+
return password;
3755
}
3856

3957
@Override
4058
public String getBucketName() {
41-
return "springdata_quickstart";
59+
return bucket;
60+
}
61+
62+
@Override
63+
public String typeKey() {
64+
return "type";
4265
}
4366

4467
@Bean
45-
public Bucket getCouchbaseBucket(Cluster cluster) throws Exception {
68+
public Bucket getCouchbaseBucket(Cluster cluster){
4669
// verify that bucket exists
4770
if (!cluster.buckets().getAllBuckets().containsKey(getBucketName())) {
4871
// create the bucket if it doesn't
4972
cluster.buckets().createBucket(
50-
BucketSettings.create(getBucketName())
51-
.bucketType(BucketType.COUCHBASE)
52-
.minimumDurabilityLevel(DurabilityLevel.NONE)
53-
.ramQuotaMB(128)
54-
);
55-
Thread.sleep(1000);
73+
BucketSettings.create(getBucketName())
74+
.bucketType(BucketType.COUCHBASE)
75+
.minimumDurabilityLevel(DurabilityLevel.NONE)
76+
.ramQuotaMB(128));
77+
try {
78+
Thread.sleep(1000);
79+
} catch (InterruptedException e) {
80+
Thread.currentThread().interrupt();
81+
e.printStackTrace();
82+
}
5683
}
57-
5884
return cluster.bucket(getBucketName());
5985
}
60-
}
61-
86+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package org.couchbase.quickstart.springdata.config;
2+
3+
import java.util.Optional;
4+
5+
import org.couchbase.quickstart.springdata.model.Airline;
6+
import org.couchbase.quickstart.springdata.model.Airport;
7+
import org.couchbase.quickstart.springdata.model.Route;
8+
import org.couchbase.quickstart.springdata.repository.AirlineRepository;
9+
import org.couchbase.quickstart.springdata.repository.AirportRepository;
10+
import org.couchbase.quickstart.springdata.repository.RouteRepository;
11+
import org.springframework.beans.factory.annotation.Autowired;
12+
import org.springframework.boot.CommandLineRunner;
13+
import org.springframework.stereotype.Component;
14+
15+
@Component
16+
public class DBSetupRunner implements CommandLineRunner {
17+
18+
@Autowired
19+
private AirlineRepository airlineRepository;
20+
21+
@Autowired
22+
private AirportRepository airportRepository;
23+
24+
@Autowired
25+
private RouteRepository routeRepository;
26+
27+
@Override
28+
public void run(String... strings) throws Exception {
29+
Optional<Airline> airline = airlineRepository.findById("airline_10"); // SFO
30+
if (airline.isPresent()) {
31+
System.out.println("got SFO: " + airline.get());
32+
} else {
33+
System.out.println("SFO not found");
34+
}
35+
36+
Optional<Airport> airport = airportRepository.findById("airport_1254"); // SFO
37+
if (airport.isPresent()) {
38+
System.out.println("got SFO: " + airport.get());
39+
} else {
40+
System.out.println("SFO not found");
41+
}
42+
43+
Optional<Route> route = routeRepository.findById("route_10000"); // SFO
44+
if (route.isPresent()) {
45+
System.out.println("got SFO: " + route.get());
46+
} else {
47+
System.out.println("SFO not found");
48+
}
49+
try {
50+
} catch (Exception e) {
51+
e.printStackTrace();
52+
}
53+
}
54+
55+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// package org.couchbase.quickstart.springdata.config;
2+
3+
// import org.springframework.context.annotation.Bean;
4+
// import org.springframework.context.annotation.Configuration;
5+
6+
// import springfox.documentation.builders.PathSelectors;
7+
// import springfox.documentation.builders.RequestHandlerSelectors;
8+
// import springfox.documentation.spi.DocumentationType;
9+
// import springfox.documentation.spring.web.plugins.Docket;
10+
11+
// @Configuration
12+
// public class Swagger {
13+
// @Bean
14+
// public Docket api() {
15+
// return new Docket(DocumentationType.SWAGGER_2)
16+
// .select()
17+
// .apis(RequestHandlerSelectors.basePackage("org.couchbase.quickstart.controllers"))
18+
// .paths(PathSelectors.any())
19+
// .build();
20+
// }
21+
// }
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package org.couchbase.quickstart.springdata.controller;
2+
3+
import java.util.Optional;
4+
5+
import org.couchbase.quickstart.springdata.model.Airline;
6+
import org.couchbase.quickstart.springdata.services.AirlineService;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.data.domain.Page;
9+
import org.springframework.data.domain.PageRequest;
10+
import org.springframework.http.HttpStatus;
11+
import org.springframework.http.ResponseEntity;
12+
import org.springframework.web.bind.annotation.DeleteMapping;
13+
import org.springframework.web.bind.annotation.GetMapping;
14+
import org.springframework.web.bind.annotation.PathVariable;
15+
import org.springframework.web.bind.annotation.PostMapping;
16+
import org.springframework.web.bind.annotation.PutMapping;
17+
import org.springframework.web.bind.annotation.RequestBody;
18+
import org.springframework.web.bind.annotation.RequestMapping;
19+
import org.springframework.web.bind.annotation.RequestParam;
20+
import org.springframework.web.bind.annotation.RestController;
21+
22+
@RestController
23+
@RequestMapping("/api/v1/airline")
24+
public class AirlineController {
25+
26+
private AirlineService airlineService;
27+
28+
@Autowired
29+
public AirlineController(AirlineService airlineService) {
30+
this.airlineService = airlineService;
31+
}
32+
33+
@PostMapping("/{id}")
34+
public ResponseEntity<Airline> createAirline(@PathVariable String id, @RequestBody Airline airline) {
35+
Airline createdAirline = airlineService.createAirline(id, airline);
36+
return new ResponseEntity<>(createdAirline, HttpStatus.CREATED);
37+
}
38+
39+
@GetMapping("/{id}")
40+
public ResponseEntity<Airline> getAirline(@PathVariable String id) {
41+
Optional<Airline> airline = airlineService.getAirlineById(id);
42+
return airline.map(value -> new ResponseEntity<>(value, HttpStatus.OK))
43+
.orElseGet(() -> new ResponseEntity<>(HttpStatus.NOT_FOUND));
44+
}
45+
46+
@PutMapping("/{id}")
47+
public ResponseEntity<Airline> updateAirline(@PathVariable String id, @RequestBody Airline airline) {
48+
Airline updatedAirline = airlineService.updateAirline(id, airline);
49+
return new ResponseEntity<>(updatedAirline, HttpStatus.OK);
50+
}
51+
52+
@DeleteMapping("/{id}")
53+
public ResponseEntity<Void> deleteAirline(@PathVariable String id) {
54+
airlineService.deleteAirline(id);
55+
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
56+
}
57+
58+
@GetMapping("/list")
59+
public ResponseEntity<Page<Airline>> listAirlines(@RequestParam(defaultValue = "0") int page,
60+
@RequestParam(defaultValue = "10") int size) {
61+
Page<Airline> airlines = airlineService.getAllAirlines(PageRequest.of(page, size));
62+
return new ResponseEntity<>(airlines, HttpStatus.OK);
63+
}
64+
65+
@GetMapping("/country/{country}")
66+
public ResponseEntity<Page<Airline>> listAirlinesByCountry(@PathVariable String country, @RequestParam(defaultValue = "0") int page,
67+
@RequestParam(defaultValue = "10") int size) {
68+
Page<Airline> airlines = airlineService.findByCountry(country,PageRequest.of(page, size));
69+
return new ResponseEntity<>(airlines, HttpStatus.OK);
70+
}
71+
72+
@GetMapping("/destination/{destinationAirport}")
73+
public ResponseEntity<Page<Airline>> listAirlinesByDestinationAirport(@RequestParam(defaultValue = "0") int page,
74+
@RequestParam(defaultValue = "10") int size, @PathVariable String destinationAirport) {
75+
Page<Airline> airlines = airlineService.findByDestinationAirport(PageRequest.of(page, size),
76+
destinationAirport);
77+
return new ResponseEntity<>(airlines, HttpStatus.OK);
78+
}
79+
80+
}

0 commit comments

Comments
 (0)