
Develop a full stack web application from scratch by following a hands-on, code-with-me approach, building a library management system with front end, back end, and database.
Draw a basic full-stack architecture with a PostgreSQL relational database for books and members, a Java Spring Boot backend exposing REST APIs, and a frontend using HTML, JavaScript, and CSS.
Lay out the development plan from a visual HTML UI template to a Postgres SQL database, Java Spring Boot backend with REST APIs, connecting via JavaScript, and CSS styling.
Create a library management frontend using HTML templates in Visual Studio Code, building home, search, add, edit, and checkout pages with forms and navigation.
Explore a simple library data model featuring books, members, postal addresses, and a checkout register, detailing primary keys and foreign key relationships created via backend in PostgreSQL.
Set up a PostgreSQL database using Pgadmin, create a database named my library app, connect with Dbeaver, and prepare for backend initialization by exploring the public schema.
Explore a three-layer backend architecture with repository, service, and controller, using JPA entities to map tables, and flow data from UI to database through the service and repository.
Initialize a spring boot project via spring initializer, add web and jpa dependencies, configure postgresql driver and ddl-auto update in application properties, and run on localhost:8080.
Create database tables from JPA entities by defining book, postal address, member, and checkout register entities with proper mappings, constraints, and foreign keys; verify with pgadmin and beaver.
Create JPA repositories for books, members, postal addresses, and checkout registers by extending JPA repository interfaces to enable crud operations and custom query methods.
Create a book management feature by implementing a book service interface and its implementation, wiring with a repository, and exposing a rest controller with post mapping to create books.
Introduce the data transfer object pattern to secure data by mapping JPA entities to DTOs and reduce remote calls by packaging related data into one DTO.
Introduce a book dto and mapper to convert between entity and dto, then refactor services and controllers to operate on dto instead of entities.
Implement get requests for books in a java spring boot app by retrieving all books and a book by ID via a service, repository, dtos, and mapper.
Learn to implement a patch-based update for books with a four-step service: find by id, apply non-null field updates, save via repository, and map back to a DTO.
Learn to implement delete operation in the book management crud flow by calling delete by id in the service, exposing a delete endpoint that returns a confirmation message.
Design search services and controllers for books using JPA repository methods and criteria builder to support title, author, ISBN, and barcode queries with DTO mapping.
Implement postal address handling with a DTO pattern by creating a mapper, service, repository, and REST controller. Build the create address endpoint using post mapping and DTO-to-entity mapping.
Learn to implement get all addresses and get address by id endpoints using a service, repository, and mapper to return address DTOs via a Spring Boot REST API.
Update postal address via patch mapping: locate by id, partially update non-null fields from the address DTO, save with the repository, and map to the updated address DTO.
Implement a delete address endpoint in a Spring Boot app by deleting by id through the repository, exposed via a delete mapping, and returning a confirmation message.
Develop a member feature by building services, controllers, and mappers for a member entity, using a member dto and address dto to persist data via repositories.
Use the transactional annotation to wrap the two database operations so both the postal address and the member are saved together, and the system rolls back if anything fails.
Design get all members and get member by id in the member service, using repository.findAll and repository.findById, mapping entities to member dtos via the member mapper.
Implement a patch update flow for a member using a DTO pattern: find by id, apply partial updates (membership dates and postal address), save, and return the updated member.
Implement delete member functionality with a delete by id in the service and controller, and ensure cascading delete of the associated postal address using cascade all.
Implement a service and controller to search members by card number, first name, last name, and barcode using a criteria builder, returning member dtos.
Create library checkout register by modeling the entity and DTO, mapping them, and building a service and REST controller to calculate due dates from a loan period in application properties.
Create services and controllers to read and fetch checkout registers from the database, map entities to register dtos, and expose get all registers and get register by id endpoints.
Implement an update flow for checkout registers, updating due and return dates. Compute overdue fines from a property, map updates to a dto, and expose a patch endpoint.
Implement a delete register operation in a Spring Boot REST API, using a service and controller to delete by id and return the message 'checkout register deleted' with HTTP OK.
Develop services and a controller to search the checkout register by member ID and by book ID, using JPA repository methods and mapping results to register DTOs.
Implement robust exception handling in a Spring Boot application by creating a global exception handler and a resource not found exception, returning meaningful error details with 404 not found.
Introduce a backend logging system using a logger to monitor the book flow from controller to service, logging book DTOs, mappings, and saved entities for debugging.
Configure cross-origin resource sharing in spring boot to allow requests from any origin, enabling all methods and headers so the frontend on a different server can access the backend.
Explore swagger documentation to view and test rest APIs, dtos, and controllers in one place, boosting frontend-backend collaboration. Configure spring doc with a single build.gradle change to enable swagger UI.
Develop the front end by wiring an add book HTML form to the backend via the post API using a dedicated add book script, fetch calls, and form data.
Implement a front end add member feature that saves a new member and postal address to the database via a REST API, with form handling, validation, and backend verification.
Develop the search members feature by wiring the front end to the back end API with barcode, card number, first name, and last name filters, displaying results in a table.
Learn to implement a front-end search books feature that queries books by barcode, isbn, author, and title, fetches results from the backend, and displays them in a dynamic results table.
Create a member info page that fetches member details by id from the URL, then displays name, contact info, address, and membership dates with proper formatting.
Fetch the member's checked-out books by querying the checkout register and the books table. Display titles, authors, and due dates on the member info page, handling empty results gracefully.
Explain how to implement the return book feature: update return date, increase available copies, patch the checkout, display overdue fines, and refresh the checked out books list.
toggle the membership action link between activate and terminate and implement a patch request to update membership status, setting today's date when ending membership.
Enhance member hyperlinks by appending the member id and barcode to checkout, history, and edit links, and conditionally display the checkout link based on membership status.
Build a book info page that fetches and displays details from the API, showing ISBN, publisher, year, place of publication, and available copies while adjusting checkout links.
Implement a current holders feature by fetching loans from the checkout register and displaying a table of members with first name, last name, card number, checkout date, and due date.
Develop add and remove copy features on the book info page by updating available copies via a patch request, using JavaScript event listeners and a confirmation dialog.
Learn how to enhance the book info page by making checkout and edit hyperlinks carry book barcode and id, and hide the remove copy link when zero copies are available.
Develop the book checkout feature by scanning member and book barcodes, creating a checkout register, and updating available copies, with barcode pre-fill and REST API integration.
Enable pre-filled member and book barcodes in the checkout form by reading url parameters, and switch backend barcode search to exact matches for reliable checkout.
Create and test library data by building mock data: add members and books, simulate checkouts and returns, and prepare the database for feature testing.
Improve member search by adding empty checks for the barcode field in the backend, skipping barcode searches when empty and enabling searches by name.
Build member history page that displays a checkout history table for a member, fetching member, registers, and books by id, and showing title, author, dates, fines, and a book link.
This lecture shows how to fetch a book's checkout history from the backend, filter completed returns, fetch member details, and render an html table with dates and names.
Master the edit member workflow by pre-filling a form with data fetched from the API, displaying the member id, and sending a patch request to update the member.
Build an edit book page that pre-fills data from the book id, updates fields such as title, author, ISBN, publisher, and year, and patches the backend with updated book data.
Develop and apply CSS styling to an HTML page by creating and linking style.css, defining color variables (primary, secondary, accent, hover), and turning links into styled buttons with hover effects.
Apply a shared stylesheet to the search members page, styling the form, inputs, and buttons, and build a styled results table with alternating rows, borders, hover effects, and action buttons.
Apply prewritten css to the search books page, turning the form, buttons, and results table into a styled, interactive front-end using the search books script and results container.
Apply consistent styles to the add member page by updating HTML inputs and CSS for date and email, convert links to buttons, and finalize the add member page.
Apply styles to the add book HTML page by linking the CSS, using the search form class and button class, and standardizing the year of publication input as type number.
Style the book checkout page by linking the style CSS, setting the form to search form, and the buttons to button; save and refresh to see the polished page.
Polish the member-info.html page by applying styles, turning hyperlinks into buttons, refining headings and spacing, and implementing a standalone action button for the return link.
Transform the member history page by applying styles, updating HTML and JS to use a single results table without separate head and body sections, and finalize the member history page.
This lecture guides redesigning the book info page, including search and book views, and standardizes current holders and checkout history tables using CSS and button styles.
Finish styling the edit book page by linking the stylesheet, applying the search form and button classes, and ensuring consistent CSS styling; test all features and complete the application.
Welcome to this comprehensive course designed to transform you into a proficient full stack developer. This course is meticulously crafted to cover all the foundational concepts necessary to excel in the realms of both frontend and backend development, ensuring you acquire the title of a full stack developer with confidence.
Embark on a detailed learning journey where we will build a complete project from the ground up. This hands-on approach will introduce you to essential topics such as data modeling, the intricacies of backend development, and the art of crafting engaging user interfaces. You'll gain in-depth knowledge and practical skills in a variety of technologies, including:
PostgreSQL: Dive into the world of relational databases and learn how to manage and manipulate data effectively.
Java Development: Master the Java programming language, a cornerstone of backend development, known for its performance and versatility.
SpringBoot Framework: Discover the power of SpringBoot, enabling rapid development and ease of application deployment.
Postman: Become proficient in testing APIs with Postman, an essential tool for backend developers.
HTML & CSS Design: Unleash your creative side by learning how to design visually appealing and responsive websites.
JavaScript: Enhance the interactivity and functionality of your web pages with JavaScript, the backbone of frontend development.
To maximize the benefits of this course, I encourage you to actively follow along. Pause the video content regularly to code side-by-side with me. This practice will not only solidify your understanding but also equip you with hands-on experience, setting a strong foundation for your software development career.
I am Luka Popov, your guide on this educational adventure. Holding certifications as an Oracle Certified Associate: Java SE 8 Programmer and Oracle Certified Professional: Java SE 17 Developer, I come with a PhD in theoretical physics. My background includes over a decade of teaching experience at the university level, coupled with more than five years of professional software development experience. Currently, I serve as a senior Java developer in a leading telecom company.
Embarking on this course is the first step towards mastering full stack development. I am here to support your learning journey every step of the way. Should you have any questions or need further clarification, please do not hesitate to reach out.
Happy learning, and I look forward to helping you achieve your goals in the fascinating world of full stack development!