Skip to content

Instantly share code, notes, and snippets.

@zachpendleton
Created June 25, 2021 08:50
Show Gist options
  • Save zachpendleton/94e60e02b65d311fbe0cfcb9a1ec523f to your computer and use it in GitHub Desktop.
Save zachpendleton/94e60e02b65d311fbe0cfcb9a1ec523f to your computer and use it in GitHub Desktop.
package com.example.demo.repository;
import static com.example.demo.generated.jooq.Tables.COURSES;
import com.example.demo.generated.jooq.tables.records.CoursesRecord;
import com.example.demo.model.Course;
import com.example.demo.model.Course.Visibility;
import java.util.List;
import java.util.Optional;
import org.jooq.DSLContext;
import org.springframework.stereotype.Repository;
@Repository
public class CoursesRepository {
private final DSLContext db;
public CoursesRepository(DSLContext db) {
this.db = db;
}
public Optional<Course> findOne(long id) {
return db
.selectFrom(COURSES)
.where(COURSES.ID.eq(id))
.fetchOptional(this::mapper);
}
public List<Course> findAll() {
return db
.selectFrom(COURSES)
.fetch(this::mapper);
}
public Optional<Course> create(Course course) {
var record = mapper(course);
record.attach(db.configuration());
record.changed(COURSES.ID, false);
if (record.store() > 0) {
return Optional.of(mapper(record));
}
return Optional.empty();
}
private CoursesRecord mapper(Course course) {
var record = new CoursesRecord();
record.setId(course.getId());
record.setName(course.getName());
record.setStartAt(course.getStartAt());
record.setVisibility(course.getVisibility().toString());
record.setSeats(course.getSeats());
record.setEnrollmentActive(course.isEnrollmentActive());
return record;
}
private Course mapper(CoursesRecord record) {
if (record == null) {
return null;
}
return new Course(
record.getId(),
record.getName(),
record.getStartAt(),
Visibility.valueOf(record.getVisibility()),
record.getSeats(),
record.getEnrollmentActive()
);
}
}
package com.example.demo.repository;
import static org.junit.jupiter.api.Assertions.assertEquals;
import com.example.demo.model.Course;
import org.jooq.DSLContext;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jooq.JooqTest;
@JooqTest
class CoursesRepositoryTest {
@Autowired
DSLContext db;
CoursesRepository repository;
@BeforeEach
void setUp() {
repository = new CoursesRepository(db);
}
@Test
void itCanLookUpACourse() {
var course = new Course();
course.setName("Test Course");
var expected = repository.create(course).orElseThrow();
var result = repository.findOne(expected.getId()).orElseThrow();
assertEquals(expected.getName(), result.getName());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment