Repository files navigation

Book Library

Build StatusCICoverage StatusDeployed on HerokuLicense

Author: Brandon Autrey

Project setup

Backend README

Frontend README

library
├─┬ backend → backend module with Spring Boot code
│ ├── src
│ └── pom.xml
├─┬ frontend → frontend module with Vue.js code
│ ├── src
│ └── pom.xml
└── pom.xml → Maven parent pom managing both modules

Motivation

This is a practice project to use the skills I learned in Enterprise Systems Integration Master class and to expand upon what I've learned. This project also borrows ideas from this spring-boot-vuejs repository. https://github.com/jonashackt/spring-boot-vuejs

Goal

To write a library book rental application for a small group of people, such as an office. This is inspired from real-life as a way to manage technical books meant to share with other co-workers.

The books are donated to the library but yet still have the owner attached to the book. The owner is the person who bought the book.

Other members can borrow a book, which is then put into the system for the other members to see. When a book is returned, the library gets updated that the book is available.

Additional features

  1. A member can write a review for a book. When the book is returned, the member that borrowed the book is prompted to write a review and will be marked as verified, as in they read the book.

  2. A member can be put on a watch list for a book if the book is not available. When the book is returned, all the member who are watching the book are notified by email that the book is now available.

Deployment

Deployed at Heroku at: https://tartu-library.herokuapp.com/

Create Deployment

  • heroku login
  • heroku create
  • git push heroku master
    • Pushes code to Heroku from master
  • heroku ps:scale web=1
  • heroku open
    • Open new tab in the browser to show app

Heroku useful commands

  • git push heroku <branch>:master
    • Pushes branch/master to Heroku
  • heroku git:remote --app my-app-name
    • Switch the remote Heroku is hooked too
  • heroku pg:psql postgresql-globular-10076 --app tartu-library
    • Login to Postgres DB CLI
  • heroku info
  • heroku config
    • Set config variables
    • heroku config:set _JAVA_OPTIONS="--enable-preview -XX:+ShowCodeDetailsInExceptionMessages"
      • Sets the java preview features to be ran with app
  • heroku logs --tail
    • View only the tail of the logs on the server

Postgres

Useful commands: Link

  • \dt - show all tables in the current scheme
    • \dt+ - show table sizes
  • \q - quit psql
  • heroku pg:psql postgresql-globular-10076 --app tartu-library < src/main/resources/seed.sql
    • run seed.sql file on the postgres database

Docker

Build docker container: docker build . --tag library:latest

Run Docker container: docker run -d -p 8090:8090 --name library library

View running Docker containers: docker ps

View logs: docker logs <container id> --follow

Stop Docker app: docker stop <container id>

Remove Docker app: docker rm <container id>

About

ESI Practice Project using Java Spring Boot and VueJS

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Book Library

Build StatusCICoverage StatusDeployed on HerokuLicense

Author: Brandon Autrey

Project setup

Backend README

Frontend README

library
├─┬ backend → backend module with Spring Boot code
│ ├── src
│ └── pom.xml
├─┬ frontend → frontend module with Vue.js code
│ ├── src
│ └── pom.xml
└── pom.xml → Maven parent pom managing both modules

Motivation

This is a practice project to use the skills I learned in Enterprise Systems Integration Master class and to expand upon what I've learned. This project also borrows ideas from this spring-boot-vuejs repository. https://github.com/jonashackt/spring-boot-vuejs

Goal

To write a library book rental application for a small group of people, such as an office. This is inspired from real-life as a way to manage technical books meant to share with other co-workers.

The books are donated to the library but yet still have the owner attached to the book. The owner is the person who bought the book.

Other members can borrow a book, which is then put into the system for the other members to see. When a book is returned, the library gets updated that the book is available.

Additional features

  1. A member can write a review for a book. When the book is returned, the member that borrowed the book is prompted to write a review and will be marked as verified, as in they read the book.

  2. A member can be put on a watch list for a book if the book is not available. When the book is returned, all the member who are watching the book are notified by email that the book is now available.

Deployment

Deployed at Heroku at: https://tartu-library.herokuapp.com/

Create Deployment

  • heroku login
  • heroku create
  • git push heroku master
    • Pushes code to Heroku from master
  • heroku ps:scale web=1
  • heroku open
    • Open new tab in the browser to show app

Heroku useful commands

  • git push heroku <branch>:master
    • Pushes branch/master to Heroku
  • heroku git:remote --app my-app-name
    • Switch the remote Heroku is hooked too
  • heroku pg:psql postgresql-globular-10076 --app tartu-library
    • Login to Postgres DB CLI
  • heroku info
  • heroku config
    • Set config variables
    • heroku config:set _JAVA_OPTIONS="--enable-preview -XX:+ShowCodeDetailsInExceptionMessages"
      • Sets the java preview features to be ran with app
  • heroku logs --tail
    • View only the tail of the logs on the server

Postgres

Useful commands: Link

  • \dt - show all tables in the current scheme
    • \dt+ - show table sizes
  • \q - quit psql
  • heroku pg:psql postgresql-globular-10076 --app tartu-library < src/main/resources/seed.sql
    • run seed.sql file on the postgres database

Docker

Build docker container: docker build . --tag library:latest

Run Docker container: docker run -d -p 8090:8090 --name library library

View running Docker containers: docker ps

View logs: docker logs <container id> --follow

Stop Docker app: docker stop <container id>

Remove Docker app: docker rm <container id>

About

ESI Practice Project using Java Spring Boot and VueJS

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Book Library

Build StatusCICoverage StatusDeployed on HerokuLicense

Author: Brandon Autrey

Project setup

Backend README

Frontend README

library
├─┬ backend → backend module with Spring Boot code
│ ├── src
│ └── pom.xml
├─┬ frontend → frontend module with Vue.js code
│ ├── src
│ └── pom.xml
└── pom.xml → Maven parent pom managing both modules

Motivation

This is a practice project to use the skills I learned in Enterprise Systems Integration Master class and to expand upon what I've learned. This project also borrows ideas from this spring-boot-vuejs repository. https://github.com/jonashackt/spring-boot-vuejs

Goal

To write a library book rental application for a small group of people, such as an office. This is inspired from real-life as a way to manage technical books meant to share with other co-workers.

The books are donated to the library but yet still have the owner attached to the book. The owner is the person who bought the book.

Other members can borrow a book, which is then put into the system for the other members to see. When a book is returned, the library gets updated that the book is available.

Additional features

  1. A member can write a review for a book. When the book is returned, the member that borrowed the book is prompted to write a review and will be marked as verified, as in they read the book.

  2. A member can be put on a watch list for a book if the book is not available. When the book is returned, all the member who are watching the book are notified by email that the book is now available.

Deployment

Deployed at Heroku at: https://tartu-library.herokuapp.com/

Create Deployment

  • heroku login
  • heroku create
  • git push heroku master
    • Pushes code to Heroku from master
  • heroku ps:scale web=1
  • heroku open
    • Open new tab in the browser to show app

Heroku useful commands

  • git push heroku <branch>:master
    • Pushes branch/master to Heroku
  • heroku git:remote --app my-app-name
    • Switch the remote Heroku is hooked too
  • heroku pg:psql postgresql-globular-10076 --app tartu-library
    • Login to Postgres DB CLI
  • heroku info
  • heroku config
    • Set config variables
    • heroku config:set _JAVA_OPTIONS="--enable-preview -XX:+ShowCodeDetailsInExceptionMessages"
      • Sets the java preview features to be ran with app
  • heroku logs --tail
    • View only the tail of the logs on the server

Postgres

Useful commands: Link

  • \dt - show all tables in the current scheme
    • \dt+ - show table sizes
  • \q - quit psql
  • heroku pg:psql postgresql-globular-10076 --app tartu-library < src/main/resources/seed.sql
    • run seed.sql file on the postgres database

Docker

Build docker container: docker build . --tag library:latest

Run Docker container: docker run -d -p 8090:8090 --name library library

View running Docker containers: docker ps

View logs: docker logs <container id> --follow

Stop Docker app: docker stop <container id>

Remove Docker app: docker rm <container id>

About

ESI Practice Project using Java Spring Boot and VueJS

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Book Library

Build StatusCICoverage StatusDeployed on HerokuLicense

Author: Brandon Autrey

Project setup

Backend README

Frontend README

library
├─┬ backend → backend module with Spring Boot code
│ ├── src
│ └── pom.xml
├─┬ frontend → frontend module with Vue.js code
│ ├── src
│ └── pom.xml
└── pom.xml → Maven parent pom managing both modules

Motivation

This is a practice project to use the skills I learned in Enterprise Systems Integration Master class and to expand upon what I've learned. This project also borrows ideas from this spring-boot-vuejs repository. https://github.com/jonashackt/spring-boot-vuejs

Goal

To write a library book rental application for a small group of people, such as an office. This is inspired from real-life as a way to manage technical books meant to share with other co-workers.

The books are donated to the library but yet still have the owner attached to the book. The owner is the person who bought the book.

Other members can borrow a book, which is then put into the system for the other members to see. When a book is returned, the library gets updated that the book is available.

Additional features

  1. A member can write a review for a book. When the book is returned, the member that borrowed the book is prompted to write a review and will be marked as verified, as in they read the book.

  2. A member can be put on a watch list for a book if the book is not available. When the book is returned, all the member who are watching the book are notified by email that the book is now available.

Deployment

Deployed at Heroku at: https://tartu-library.herokuapp.com/

Create Deployment

  • heroku login
  • heroku create
  • git push heroku master
    • Pushes code to Heroku from master
  • heroku ps:scale web=1
  • heroku open
    • Open new tab in the browser to show app

Heroku useful commands

  • git push heroku <branch>:master
    • Pushes branch/master to Heroku
  • heroku git:remote --app my-app-name
    • Switch the remote Heroku is hooked too
  • heroku pg:psql postgresql-globular-10076 --app tartu-library
    • Login to Postgres DB CLI
  • heroku info
  • heroku config
    • Set config variables
    • heroku config:set _JAVA_OPTIONS="--enable-preview -XX:+ShowCodeDetailsInExceptionMessages"
      • Sets the java preview features to be ran with app
  • heroku logs --tail
    • View only the tail of the logs on the server

Postgres

Useful commands: Link

  • \dt - show all tables in the current scheme
    • \dt+ - show table sizes
  • \q - quit psql
  • heroku pg:psql postgresql-globular-10076 --app tartu-library < src/main/resources/seed.sql
    • run seed.sql file on the postgres database

Docker

Build docker container: docker build . --tag library:latest

Run Docker container: docker run -d -p 8090:8090 --name library library

View running Docker containers: docker ps

View logs: docker logs <container id> --follow

Stop Docker app: docker stop <container id>

Remove Docker app: docker rm <container id>

About

ESI Practice Project using Java Spring Boot and VueJS

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Book Library

Build StatusCICoverage StatusDeployed on HerokuLicense

Author: Brandon Autrey

Project setup

Backend README

Frontend README

library
├─┬ backend → backend module with Spring Boot code
│ ├── src
│ └── pom.xml
├─┬ frontend → frontend module with Vue.js code
│ ├── src
│ └── pom.xml
└── pom.xml → Maven parent pom managing both modules

Motivation

This is a practice project to use the skills I learned in Enterprise Systems Integration Master class and to expand upon what I've learned. This project also borrows ideas from this spring-boot-vuejs repository. https://github.com/jonashackt/spring-boot-vuejs

Goal

To write a library book rental application for a small group of people, such as an office. This is inspired from real-life as a way to manage technical books meant to share with other co-workers.

The books are donated to the library but yet still have the owner attached to the book. The owner is the person who bought the book.

Other members can borrow a book, which is then put into the system for the other members to see. When a book is returned, the library gets updated that the book is available.

Additional features

  1. A member can write a review for a book. When the book is returned, the member that borrowed the book is prompted to write a review and will be marked as verified, as in they read the book.

  2. A member can be put on a watch list for a book if the book is not available. When the book is returned, all the member who are watching the book are notified by email that the book is now available.

Deployment

Deployed at Heroku at: https://tartu-library.herokuapp.com/

Create Deployment

  • heroku login
  • heroku create
  • git push heroku master
    • Pushes code to Heroku from master
  • heroku ps:scale web=1
  • heroku open
    • Open new tab in the browser to show app

Heroku useful commands

  • git push heroku <branch>:master
    • Pushes branch/master to Heroku
  • heroku git:remote --app my-app-name
    • Switch the remote Heroku is hooked too
  • heroku pg:psql postgresql-globular-10076 --app tartu-library
    • Login to Postgres DB CLI
  • heroku info
  • heroku config
    • Set config variables
    • heroku config:set _JAVA_OPTIONS="--enable-preview -XX:+ShowCodeDetailsInExceptionMessages"
      • Sets the java preview features to be ran with app
  • heroku logs --tail
    • View only the tail of the logs on the server

Postgres

Useful commands: Link

  • \dt - show all tables in the current scheme
    • \dt+ - show table sizes
  • \q - quit psql
  • heroku pg:psql postgresql-globular-10076 --app tartu-library < src/main/resources/seed.sql
    • run seed.sql file on the postgres database

Docker

Build docker container: docker build . --tag library:latest

Run Docker container: docker run -d -p 8090:8090 --name library library

View running Docker containers: docker ps

View logs: docker logs <container id> --follow

Stop Docker app: docker stop <container id>

Remove Docker app: docker rm <container id>

About

ESI Practice Project using Java Spring Boot and VueJS

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Book Library

Build StatusCICoverage StatusDeployed on HerokuLicense

Author: Brandon Autrey

Project setup

Backend README

Frontend README

library
├─┬ backend → backend module with Spring Boot code
│ ├── src
│ └── pom.xml
├─┬ frontend → frontend module with Vue.js code
│ ├── src
│ └── pom.xml
└── pom.xml → Maven parent pom managing both modules

Motivation

This is a practice project to use the skills I learned in Enterprise Systems Integration Master class and to expand upon what I've learned. This project also borrows ideas from this spring-boot-vuejs repository. https://github.com/jonashackt/spring-boot-vuejs

Goal

To write a library book rental application for a small group of people, such as an office. This is inspired from real-life as a way to manage technical books meant to share with other co-workers.

The books are donated to the library but yet still have the owner attached to the book. The owner is the person who bought the book.

Other members can borrow a book, which is then put into the system for the other members to see. When a book is returned, the library gets updated that the book is available.

Additional features

  1. A member can write a review for a book. When the book is returned, the member that borrowed the book is prompted to write a review and will be marked as verified, as in they read the book.

  2. A member can be put on a watch list for a book if the book is not available. When the book is returned, all the member who are watching the book are notified by email that the book is now available.

Deployment

Deployed at Heroku at: https://tartu-library.herokuapp.com/

Create Deployment

  • heroku login
  • heroku create
  • git push heroku master
    • Pushes code to Heroku from master
  • heroku ps:scale web=1
  • heroku open
    • Open new tab in the browser to show app

Heroku useful commands

  • git push heroku <branch>:master
    • Pushes branch/master to Heroku
  • heroku git:remote --app my-app-name
    • Switch the remote Heroku is hooked too
  • heroku pg:psql postgresql-globular-10076 --app tartu-library
    • Login to Postgres DB CLI
  • heroku info
  • heroku config
    • Set config variables
    • heroku config:set _JAVA_OPTIONS="--enable-preview -XX:+ShowCodeDetailsInExceptionMessages"
      • Sets the java preview features to be ran with app
  • heroku logs --tail
    • View only the tail of the logs on the server

Postgres

Useful commands: Link

  • \dt - show all tables in the current scheme
    • \dt+ - show table sizes
  • \q - quit psql
  • heroku pg:psql postgresql-globular-10076 --app tartu-library < src/main/resources/seed.sql
    • run seed.sql file on the postgres database

Docker

Build docker container: docker build . --tag library:latest

Run Docker container: docker run -d -p 8090:8090 --name library library

View running Docker containers: docker ps

View logs: docker logs <container id> --follow

Stop Docker app: docker stop <container id>

Remove Docker app: docker rm <container id>

About

ESI Practice Project using Java Spring Boot and VueJS

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Book Library

Build StatusCICoverage StatusDeployed on HerokuLicense

Author: Brandon Autrey

Project setup

Backend README

Frontend README

library
├─┬ backend → backend module with Spring Boot code
│ ├── src
│ └── pom.xml
├─┬ frontend → frontend module with Vue.js code
│ ├── src
│ └── pom.xml
└── pom.xml → Maven parent pom managing both modules

Motivation

This is a practice project to use the skills I learned in Enterprise Systems Integration Master class and to expand upon what I've learned. This project also borrows ideas from this spring-boot-vuejs repository. https://github.com/jonashackt/spring-boot-vuejs

Goal

To write a library book rental application for a small group of people, such as an office. This is inspired from real-life as a way to manage technical books meant to share with other co-workers.

The books are donated to the library but yet still have the owner attached to the book. The owner is the person who bought the book.

Other members can borrow a book, which is then put into the system for the other members to see. When a book is returned, the library gets updated that the book is available.

Additional features

  1. A member can write a review for a book. When the book is returned, the member that borrowed the book is prompted to write a review and will be marked as verified, as in they read the book.

  2. A member can be put on a watch list for a book if the book is not available. When the book is returned, all the member who are watching the book are notified by email that the book is now available.

Deployment

Deployed at Heroku at: https://tartu-library.herokuapp.com/

Create Deployment

  • heroku login
  • heroku create
  • git push heroku master
    • Pushes code to Heroku from master
  • heroku ps:scale web=1
  • heroku open
    • Open new tab in the browser to show app

Heroku useful commands

  • git push heroku <branch>:master
    • Pushes branch/master to Heroku
  • heroku git:remote --app my-app-name
    • Switch the remote Heroku is hooked too
  • heroku pg:psql postgresql-globular-10076 --app tartu-library
    • Login to Postgres DB CLI
  • heroku info
  • heroku config
    • Set config variables
    • heroku config:set _JAVA_OPTIONS="--enable-preview -XX:+ShowCodeDetailsInExceptionMessages"
      • Sets the java preview features to be ran with app
  • heroku logs --tail
    • View only the tail of the logs on the server

Postgres

Useful commands: Link

  • \dt - show all tables in the current scheme
    • \dt+ - show table sizes
  • \q - quit psql
  • heroku pg:psql postgresql-globular-10076 --app tartu-library < src/main/resources/seed.sql
    • run seed.sql file on the postgres database

Docker

Build docker container: docker build . --tag library:latest

Run Docker container: docker run -d -p 8090:8090 --name library library

View running Docker containers: docker ps

View logs: docker logs <container id> --follow

Stop Docker app: docker stop <container id>

Remove Docker app: docker rm <container id>

About

ESI Practice Project using Java Spring Boot and VueJS

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Book Library

Build StatusCICoverage StatusDeployed on HerokuLicense

Author: Brandon Autrey

Project setup

Backend README

Frontend README

library
├─┬ backend → backend module with Spring Boot code
│ ├── src
│ └── pom.xml
├─┬ frontend → frontend module with Vue.js code
│ ├── src
│ └── pom.xml
└── pom.xml → Maven parent pom managing both modules

Motivation

This is a practice project to use the skills I learned in Enterprise Systems Integration Master class and to expand upon what I've learned. This project also borrows ideas from this spring-boot-vuejs repository. https://github.com/jonashackt/spring-boot-vuejs

Goal

To write a library book rental application for a small group of people, such as an office. This is inspired from real-life as a way to manage technical books meant to share with other co-workers.

The books are donated to the library but yet still have the owner attached to the book. The owner is the person who bought the book.

Other members can borrow a book, which is then put into the system for the other members to see. When a book is returned, the library gets updated that the book is available.

Additional features

  1. A member can write a review for a book. When the book is returned, the member that borrowed the book is prompted to write a review and will be marked as verified, as in they read the book.

  2. A member can be put on a watch list for a book if the book is not available. When the book is returned, all the member who are watching the book are notified by email that the book is now available.

Deployment

Deployed at Heroku at: https://tartu-library.herokuapp.com/

Create Deployment

  • heroku login
  • heroku create
  • git push heroku master
    • Pushes code to Heroku from master
  • heroku ps:scale web=1
  • heroku open
    • Open new tab in the browser to show app

Heroku useful commands

  • git push heroku <branch>:master
    • Pushes branch/master to Heroku
  • heroku git:remote --app my-app-name
    • Switch the remote Heroku is hooked too
  • heroku pg:psql postgresql-globular-10076 --app tartu-library
    • Login to Postgres DB CLI
  • heroku info
  • heroku config
    • Set config variables
    • heroku config:set _JAVA_OPTIONS="--enable-preview -XX:+ShowCodeDetailsInExceptionMessages"
      • Sets the java preview features to be ran with app
  • heroku logs --tail
    • View only the tail of the logs on the server

Postgres

Useful commands: Link

  • \dt - show all tables in the current scheme
    • \dt+ - show table sizes
  • \q - quit psql
  • heroku pg:psql postgresql-globular-10076 --app tartu-library < src/main/resources/seed.sql
    • run seed.sql file on the postgres database

Docker

Build docker container: docker build . --tag library:latest

Run Docker container: docker run -d -p 8090:8090 --name library library

View running Docker containers: docker ps

View logs: docker logs <container id> --follow

Stop Docker app: docker stop <container id>

Remove Docker app: docker rm <container id>

About

ESI Practice Project using Java Spring Boot and VueJS

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages