Skip to content
This repository was archived by the owner on Nov 18, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions .github/workflows/testing.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: 'Testing'

on:
push:
branches:
- main
pull_request:
branches:
- main

permissions:
contents: read

jobs:
gradle-test:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '21'
- uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-

- name: Run tests
run: ./gradlew test
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ jte-classes/
logs/

### Files ###
.envrc
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@

# Bookshelf

![Java Version](https://img.shields.io/badge/Temurin-17-green?style=flat-square&logo=eclipse-adoptium)
![Kotlin Version](https://img.shields.io/badge/Kotlin-2.0.20-green?style=flat-square&logo=kotlin)
![Java Version](https://img.shields.io/badge/Temurin-20-green?style=flat-square&logo=eclipse-adoptium)
![Kotlin Version](https://img.shields.io/badge/Kotlin-2.2.0-green?style=flat-square&logo=kotlin)
![Status](https://img.shields.io/badge/Status-Beta-yellowgreen?style=flat-square)

[![Gradle](https://img.shields.io/badge/Gradle-8.10-informational?style=flat-square&logo=gradle)](https://github.com/gradle/gradle)
[![Ktlint](https://img.shields.io/badge/Ktlint-1.3.1-informational?style=flat-square)](https://github.com/pinterest/ktlint)
[![Javalin](https://img.shields.io/badge/Javalin-6.3.0-informational?style=flat-square)](https://github.com/javalin/javalin)
[![Bulma](https://img.shields.io/badge/Bulma-1.0.1-informational?style=flat-square)](https://github.com/jgthms/bulma)
[![Gradle](https://img.shields.io/badge/Gradle-9.0-informational?style=flat-square&logo=gradle)](https://github.com/gradle/gradle)
[![Ktlint](https://img.shields.io/badge/Spotless-7.2-informational?style=flat-square)](https://github.com/diffplug/spotless)
[![Javalin](https://img.shields.io/badge/Javalin-6.7-informational?style=flat-square)](https://github.com/javalin/javalin)
[![Bulma](https://img.shields.io/badge/Bulma-1.0-informational?style=flat-square)](https://github.com/jgthms/bulma)

[![Github - Version](https://img.shields.io/github/v/tag/Buried-In-Code/Bookshelf?logo=Github&label=Version&style=flat-square)](https://github.com/Buried-In-Code/Bookshelf/tags)
[![Github - License](https://img.shields.io/github/license/Buried-In-Code/Bookshelf?logo=Github&label=License&style=flat-square)](https://opensource.org/licenses/MIT)
Expand All @@ -24,7 +24,7 @@ Tool for tracking books on your bookshelf or books you wish were on it.
1. Make sure you have a supported version of [Java](https://adoptium.net/temurin/releases/) installed: `java --version`
2. Clone the repo: `git clone https://github.com/Buried-In-Code/Bookshelf`
3. Build using: `./gradlew build`
4. Run using: `java -jar ./app/build/libs/app-0.4.1-all.jar`
4. Run using: `java -jar ./app/build/libs/app-0.5.0-all.jar`

### via Gradle

Expand Down
63 changes: 32 additions & 31 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,48 +1,49 @@
plugins {
application
alias(libs.plugins.jte)
alias(libs.plugins.shadow)
application
alias(libs.plugins.jte)
alias(libs.plugins.shadow)
}

dependencies {
implementation(project(":openlibrary"))
implementation(libs.bundles.exposed)
implementation(libs.bundles.jackson)
implementation(libs.bundles.javalin)
implementation(libs.bundles.jte)
implementation(libs.hoplite.core)
runtimeOnly(libs.postgres)
implementation(project(":openlibrary"))
implementation(libs.bundles.exposed)
implementation(libs.bundles.jackson)
implementation(libs.bundles.javalin)
implementation(libs.bundles.jte)
implementation(libs.hoplite.core)
}

application {
mainClass = "github.buriedincode.bookshelf.AppKt"
applicationName = "Bookshelf"
mainClass = "github.buriedincode.BookshelfKt"
applicationName = "Bookshelf"
}

jte {
precompile()
kotlinCompileArgs = arrayOf("-jvm-target", "17")
precompile()
kotlinCompileArgs = arrayOf("-jvm-target", "21")
}

tasks.clean { doLast { delete("$projectDir/jte-classes") } }

tasks.jar {
dependsOn(tasks.precompileJte)
from(
fileTree("jte-classes") {
include("**/*.class")
include("**/*.bin") // Only required if you use binary templates
},
)
manifest.attributes["Main-Class"] = "github.buriedincode.bookshelf.AppKt"
dependsOn(tasks.precompileJte)
from(
fileTree("jte-classes") {
include("**/*.class")
include("**/*.bin") // Only required if you use binary templates
}
)
manifest.attributes["Main-Class"] = "github.buriedincode.BookshelfKt"
}

tasks.shadowJar {
dependsOn(tasks.precompileJte)
from(
fileTree("jte-classes") {
include("**/*.class")
include("**/*.bin") // Only required if you use binary templates
},
)
manifest.attributes["Main-Class"] = "github.buriedincode.bookshelf.AppKt"
mergeServiceFiles()
dependsOn(tasks.precompileJte)
from(
fileTree("jte-classes") {
include("**/*.class")
include("**/*.bin") // Only required if you use binary templates
}
)
manifest.attributes["Main-Class"] = "github.buriedincode.BookshelfKt"
mergeServiceFiles()
}
10 changes: 5 additions & 5 deletions app/src/main/jte/components/filters/book.kte
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
@import github.buriedincode.bookshelf.models.Creator
@import github.buriedincode.bookshelf.models.Format
@import github.buriedincode.bookshelf.models.Publisher
@import github.buriedincode.bookshelf.models.Role
@import github.buriedincode.bookshelf.models.Series
@import github.buriedincode.models.Creator
@import github.buriedincode.models.Format
@import github.buriedincode.models.Publisher
@import github.buriedincode.models.Role
@import github.buriedincode.models.Series
@import kotlin.collections.List
@param creators: List<Creator>
@param creatorSelected: Creator? = null
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/jte/components/forms/input_date.kte
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@import github.buriedincode.bookshelf.Utils.toString
@import github.buriedincode.Utils.toString
@import kotlinx.datetime.LocalDate
@param label: String
@param name: String
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/jte/components/forms/select/book.kte
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
@import github.buriedincode.models.Book
@import kotlin.collections.List
@import github.buriedincode.bookshelf.models.Book
@param label: String = "Book"
@param name: String = "book-id"
@param options: List<Book>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/jte/components/forms/select/creator.kte
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
@import github.buriedincode.models.Creator
@import kotlin.collections.List
@import github.buriedincode.bookshelf.models.Creator
@param label: String = "Creator"
@param name: String = "creator-id"
@param options: List<Creator>
Expand Down
5 changes: 2 additions & 3 deletions app/src/main/jte/components/forms/select/format.kte
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
@import github.buriedincode.models.Format
@import kotlin.collections.List
@import github.buriedincode.bookshelf.models.Format
@import github.buriedincode.bookshelf.Utils.titlecase
@param label: String = "Format"
@param name: String = "format"
@param options: List<Format>
Expand All @@ -13,7 +12,7 @@
<select class="input" id="${name}" name="${name}">
<option disabled selected="${selected == null}" value="">Select Format</option>
@for(entry in options)
<option selected="${selected == entry}" value="${entry.name}">${entry.titlecase()}</option>
<option selected="${selected == entry}" value="${entry.name}">${entry.displayName}</option>
@endfor
</select>
</div>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/jte/components/forms/select/publisher.kte
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
@import github.buriedincode.models.Publisher
@import kotlin.collections.List
@import github.buriedincode.bookshelf.models.Publisher
@param label: String = "Publisher"
@param name: String = "publisher-id"
@param options: List<Publisher>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/jte/components/forms/select/role.kte
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
@import github.buriedincode.models.Role
@import kotlin.collections.List
@import github.buriedincode.bookshelf.models.Role
@param label: String = "Role"
@param name: String = "role-id"
@param options: List<Role>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/jte/components/forms/select/series.kte
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
@import github.buriedincode.models.Series
@import kotlin.collections.List
@import github.buriedincode.bookshelf.models.Series
@param label: String = "Series"
@param name: String = "series-id"
@param options: List<Series>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/jte/components/forms/select/user.kte
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
@import github.buriedincode.models.User
@import kotlin.collections.List
@import github.buriedincode.bookshelf.models.User
@param label: String = "User"
@param name: String = "user-id"
@param options: List<User>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/jte/components/navbar.kte
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@import github.buriedincode.bookshelf.models.User
@import github.buriedincode.models.User
@param session: User? = null

<nav class="navbar is-primary is-fixed-top" role="navigation" aria-label="main navigation">
Expand Down
8 changes: 4 additions & 4 deletions app/src/main/jte/components/views/book.kte
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
@import github.buriedincode.bookshelf.models.Book
@import github.buriedincode.bookshelf.models.Series
@import github.buriedincode.bookshelf.models.User
@import github.buriedincode.bookshelf.Utils.toHumanReadable
@import github.buriedincode.Utils.toHumanReadable
@import github.buriedincode.models.Book
@import github.buriedincode.models.Series
@import github.buriedincode.models.User
@import kotlinx.datetime.LocalDate
@param entry: Book
@param series: Pair<Series, Int?>? = null
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/jte/components/views/creator.kte
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@import github.buriedincode.bookshelf.models.Creator
@import github.buriedincode.models.Creator
@param entry: Creator

<a class="card" href="/creators/${entry.id.value}" style="width: 192px">
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/jte/components/views/publisher.kte
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@import github.buriedincode.bookshelf.models.Publisher
@import github.buriedincode.models.Publisher
@param entry: Publisher

<a class="card" href="/publishers/${entry.id.value}">
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/jte/components/views/role.kte
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@import github.buriedincode.bookshelf.models.Role
@import github.buriedincode.models.Role
@param entry: Role

<a class="card" href="/roles/${entry.id.value}">
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/jte/components/views/series.kte
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@import github.buriedincode.bookshelf.models.Series
@import github.buriedincode.models.Series
@param entry: Series

<a class="card" href="/series/${entry.id.value}">
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/jte/components/views/user.kte
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
@import github.buriedincode.bookshelf.models.User
@import github.buriedincode.bookshelf.Utils.toHumanReadable
@import github.buriedincode.Utils.toHumanReadable
@import github.buriedincode.models.User
@import kotlinx.datetime.LocalDate
@param entry: User
@param readDate: LocalDate? = null
Expand Down
13 changes: 6 additions & 7 deletions app/src/main/jte/templates/book/create.kte
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
@import github.buriedincode.bookshelf.models.Format
@import github.buriedincode.bookshelf.models.Publisher
@import github.buriedincode.bookshelf.models.User
@import github.buriedincode.models.Format
@import github.buriedincode.models.Publisher
@import github.buriedincode.models.User
@import java.time.LocalDate
@import kotlin.collections.List
@param session: User
@param formats: List<Format>
@param publishers: List<Publisher>

<!DOCTYPE html>
<html lang="en-GB" data-theme="villain">
<html lang="en-GB" data-theme="dark">
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1" name="viewport">
<title>Bookshelf</title>
<link href="https://use.fontawesome.com/releases/v6.3.0/css/all.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bulma@1.0.1/css/bulma.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/gh/Buried-In-Code/Vegeta@0.2.0/css/vegeta.min.css" rel="stylesheet">
<link href="https://use.fontawesome.com/releases/v6.7.2/css/all.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bulma@1.0.4/css/bulma.min.css" rel="stylesheet">
<link href="/static/css/styles.css" rel="stylesheet">
<link href="/static/img/favicon.ico" id="favicon" rel="icon" type="image/x-icon">
</head>
Expand Down
9 changes: 4 additions & 5 deletions app/src/main/jte/templates/book/import.kte
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
@import github.buriedincode.bookshelf.models.User
@import github.buriedincode.models.User
@param session: User

<!DOCTYPE html>
<html lang="en-GB" data-theme="villain">
<html lang="en-GB" data-theme="dark">
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1" name="viewport">
<title>Bookshelf</title>
<link href="https://use.fontawesome.com/releases/v6.3.0/css/all.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bulma@1.0.1/css/bulma.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/gh/Buried-In-Code/Vegeta@0.2.0/css/vegeta.min.css" rel="stylesheet">
<link href="https://use.fontawesome.com/releases/v6.7.2/css/all.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bulma@1.0.4/css/bulma.min.css" rel="stylesheet">
<link href="/static/css/styles.css" rel="stylesheet">
<link href="/static/img/favicon.ico" id="favicon" rel="icon" type="image/x-icon">
</head>
Expand Down
21 changes: 10 additions & 11 deletions app/src/main/jte/templates/book/list.kte
Original file line number Diff line number Diff line change
@@ -1,25 +1,24 @@
@import github.buriedincode.bookshelf.models.Book
@import github.buriedincode.bookshelf.models.Creator
@import github.buriedincode.bookshelf.models.Format
@import github.buriedincode.bookshelf.models.Publisher
@import github.buriedincode.bookshelf.models.Role
@import github.buriedincode.bookshelf.models.Series
@import github.buriedincode.bookshelf.models.User
@import github.buriedincode.models.Book
@import github.buriedincode.models.Creator
@import github.buriedincode.models.Format
@import github.buriedincode.models.Publisher
@import github.buriedincode.models.Role
@import github.buriedincode.models.Series
@import github.buriedincode.models.User
@import kotlin.collections.List
@param session: User?
@param resources: List<Book>
@param filters: Map<String, Any?>
@param extras: Map<String, Any> = emptyMap()

<!DOCTYPE html>
<html lang="en-GB" data-theme="villain">
<html lang="en-GB" data-theme="dark">
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1" name="viewport">
<title>Bookshelf</title>
<link href="https://use.fontawesome.com/releases/v6.3.0/css/all.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bulma@1.0.1/css/bulma.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/gh/Buried-In-Code/Vegeta@0.2.0/css/vegeta.min.css" rel="stylesheet">
<link href="https://use.fontawesome.com/releases/v6.7.2/css/all.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bulma@1.0.4/css/bulma.min.css" rel="stylesheet">
<link href="/static/css/styles.css" rel="stylesheet">
<link href="/static/img/favicon.ico" id="favicon" rel="icon" type="image/x-icon">
</head>
Expand Down
7 changes: 3 additions & 4 deletions app/src/main/jte/templates/book/search.kte
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
<!DOCTYPE html>
<html lang="en-GB" data-theme="villain">
<html lang="en-GB" data-theme="dark">
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1" name="viewport">
<title>Bookshelf</title>
<link href="https://use.fontawesome.com/releases/v6.3.0/css/all.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bulma@1.0.1/css/bulma.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/gh/Buried-In-Code/Vegeta@0.2.0/css/vegeta.min.css" rel="stylesheet">
<link href="https://use.fontawesome.com/releases/v6.7.2/css/all.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bulma@1.0.4/css/bulma.min.css" rel="stylesheet">
<link href="/static/css/styles.css" rel="stylesheet">
<link href="/static/img/favicon.ico" id="favicon" rel="icon" type="image/x-icon">
</head>
Expand Down
Loading
Loading