Skip to content

Commit

Permalink
Initial example-hello project.
Browse files Browse the repository at this point in the history
Demonstrates bosk-spring-boot-3.
  • Loading branch information
prdoyle committed Jul 6, 2023
1 parent 33987ec commit 8a4ce26
Show file tree
Hide file tree
Showing 11 changed files with 191 additions and 1 deletion.
37 changes: 37 additions & 0 deletions example-hello/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
HELP.md
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/

### VS Code ###
.vscode/
36 changes: 36 additions & 0 deletions example-hello/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.1'
id 'io.spring.dependency-management' version '1.1.0'
}

group = 'io.vena'
version = '0.0.1-SNAPSHOT'

java {
sourceCompatibility = '17'
}

configurations {
compileOnly {
extendsFrom annotationProcessor
}
}

repositories {
mavenCentral()
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
testImplementation 'org.springframework.boot:spring-boot-starter-test'

// A real project would pull this like any other library
implementation project(':bosk-spring-boot-3')
}

tasks.named('test') {
useJUnitPlatform()
}
24 changes: 24 additions & 0 deletions example-hello/src/main/java/io/vena/hello/APIEndpoints.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package io.vena.hello;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public record APIEndpoints (
HelloBosk bosk
){
@GetMapping("/hello")
GreetingDTO getHello() {
return new GreetingDTO(
bosk.refs.targets().value().stream()
.map(t -> "Hello, " + t.id() + "!")
.toList());
}

@GetMapping("/targets")
Object getTargets() {
return bosk.refs.targets().value();
}
}
7 changes: 7 additions & 0 deletions example-hello/src/main/java/io/vena/hello/GreetingDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package io.vena.hello;

import java.util.List;

public record GreetingDTO(
List<String> greetings
) { }
13 changes: 13 additions & 0 deletions example-hello/src/main/java/io/vena/hello/HelloApplication.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package io.vena.hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloApplication {

public static void main(String[] args) {
SpringApplication.run(HelloApplication.class, args);
}

}
33 changes: 33 additions & 0 deletions example-hello/src/main/java/io/vena/hello/HelloBosk.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package io.vena.hello;

import io.vena.bosk.Bosk;
import io.vena.bosk.Catalog;
import io.vena.bosk.CatalogReference;
import io.vena.bosk.Identifier;
import io.vena.bosk.Reference;
import io.vena.bosk.annotations.ReferencePath;
import io.vena.bosk.exceptions.InvalidTypeException;
import io.vena.hello.state.BoskState;
import io.vena.hello.state.Target;
import java.util.Optional;
import org.springframework.stereotype.Component;

@Component
public class HelloBosk extends Bosk<BoskState> {
public HelloBosk() throws InvalidTypeException {
super("Hello", BoskState.class, HelloBosk::defaultRoot, Bosk::simpleDriver);
}

public final Refs refs = buildReferences(Refs.class);

public interface Refs {
@ReferencePath("/targets") CatalogReference<Target> targets();
}

private static BoskState defaultRoot(Bosk<BoskState> bosk) {
return new BoskState(
Identifier.from("root"),
Catalog.of(new Target(Identifier.from("world")))
);
}
}
14 changes: 14 additions & 0 deletions example-hello/src/main/java/io/vena/hello/state/BoskState.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package io.vena.hello.state;

import io.vena.bosk.Bosk;
import io.vena.bosk.Catalog;
import io.vena.bosk.Entity;
import io.vena.bosk.Identifier;

/**
* The root of the {@link Bosk} state tree.
*/
public record BoskState(
Identifier id,
Catalog<Target> targets
) implements Entity { }
11 changes: 11 additions & 0 deletions example-hello/src/main/java/io/vena/hello/state/Target.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package io.vena.hello.state;

import io.vena.bosk.Entity;
import io.vena.bosk.Identifier;

/**
* Someone to be greeted.
*/
public record Target(
Identifier id
) implements Entity { }
2 changes: 2 additions & 0 deletions example-hello/src/main/resources/application.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
server.port=1111
bosk.web.service-path=/bosk
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package io.vena.hello;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class HelloApplicationTests {

@Test
void contextLoads() {
}

}
2 changes: 1 addition & 1 deletion settings.gradle
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
rootProject.name = 'bosk'
include 'bosk-core', 'bosk-gson', 'bosk-jackson', 'bosk-mongo', 'bosk-spring-boot-3', 'bosk-testing', 'lib-testing'
include 'bosk-core', 'bosk-gson', 'bosk-jackson', 'bosk-mongo', 'bosk-spring-boot-3', 'bosk-testing', 'lib-testing', 'example-hello'

0 comments on commit 8a4ce26

Please sign in to comment.