From cacce3374ab0407e2689fd554fc8cb095690a8eb Mon Sep 17 00:00:00 2001 From: Ajay-Dhangar Date: Fri, 23 Aug 2024 20:56:58 +0530 Subject: [PATCH 1/6] added content for Numbers in JavaScript --- blog/2024-03-15/prompt-engineering-guide.md | 2 + .../index.md | 4 + blog/from-ftp-client-to-github-action.md | 2 +- blog/sed-normalize-md-file-with-regex.md | 2 +- docs/WebSocket-for-realtime.md | 136 ------- .../data-types/primitive-types/number.md | 344 ++++++++++++++++++ 6 files changed, 352 insertions(+), 138 deletions(-) delete mode 100644 docs/WebSocket-for-realtime.md diff --git a/blog/2024-03-15/prompt-engineering-guide.md b/blog/2024-03-15/prompt-engineering-guide.md index 759a1cfde..bd25488ab 100644 --- a/blog/2024-03-15/prompt-engineering-guide.md +++ b/blog/2024-03-15/prompt-engineering-guide.md @@ -7,6 +7,8 @@ date: 2020-12-21 15:34:11 Prompt Engineering is a process of creating a prompt that is used to guide the user through a series of steps to achieve a specific goal. It is a powerful tool that can help users complete complex tasks with ease and efficiency. In this guide, we will walk you through the process of creating an effective prompt that will help you achieve your desired outcome. + + ## Step 1: Define the Goal The first step in creating an effective prompt is to define the goal you want to achieve. This could be anything from completing a task, learning a new skill, or solving a problem. By clearly defining the goal, you can create a prompt that guides the user towards that goal. diff --git a/blog/Building RESTful CRUD API in springboot/index.md b/blog/Building RESTful CRUD API in springboot/index.md index cadf6a642..10caa0461 100644 --- a/blog/Building RESTful CRUD API in springboot/index.md +++ b/blog/Building RESTful CRUD API in springboot/index.md @@ -7,6 +7,10 @@ date: 2024-06-25 hide_table_of_contents: true --- +In this article, we will learn how to build a RESTful CRUD (Create, Read, Update, Delete) API using Spring Boot. We will cover everything from project setup to testing, demonstrating best practices and essential techniques along the way. By the end of this tutorial, you will have a solid understanding of how to architect, develop, and test RESTful APIs using Spring Boot. + + + ## What is RESTFUL API? - In the realm of modern web development, RESTful APIs have become a cornerstone for building scalable, efficient, and maintainable web applications. diff --git a/blog/from-ftp-client-to-github-action.md b/blog/from-ftp-client-to-github-action.md index 7f5fc45ef..cf282afe2 100644 --- a/blog/from-ftp-client-to-github-action.md +++ b/blog/from-ftp-client-to-github-action.md @@ -1,6 +1,6 @@ --- title: "CI evolution: From FTP client to GitHub Action" -author: Ajay Dhangar +authors: ajay-dhangar tags: [ftp, sftp, GitHub Action, ftp deploy] date: 2024-03-15 11:37:46 decription: The evolution of remote file management diff --git a/blog/sed-normalize-md-file-with-regex.md b/blog/sed-normalize-md-file-with-regex.md index fbda35899..4524cdabd 100644 --- a/blog/sed-normalize-md-file-with-regex.md +++ b/blog/sed-normalize-md-file-with-regex.md @@ -1,6 +1,6 @@ --- title: "Sed: Normalize markdown file with Regex" -author: ajay-dhangar +authors: [ ajay-dhangar ] tags: [sed, regex, web clipper] date: 2024-03-15 14:37:46 description: How to normalize markdown file with Regex diff --git a/docs/WebSocket-for-realtime.md b/docs/WebSocket-for-realtime.md deleted file mode 100644 index 411425783..000000000 --- a/docs/WebSocket-for-realtime.md +++ /dev/null @@ -1,136 +0,0 @@ ---- -id: websockets-for-real-time-communication -title: WebSockets for Real-Time Communication -sidebar_label: Web Sockets ---- - -## Introduction - -WebSockets are a powerful technology for enabling real-time communication between clients and servers... - -**Purpose:** WebSocket is a protocol that provides full-duplex communication channels over a single TCP connection. Unlike HTTP, WebSocket enables continuous two-way communication between the client and the server. - -**Connection:** WebSocket allows for long-lived connections that can send data both from the client to the server and vice versa. Once established, a WebSocket connection remains open until either the client or server decides to close it. - -**Usage:** WebSocket is particularly useful for real-time applications where low-latency communication is critical, such as online gaming, financial trading platforms, chat applications, live sport score updates, and collaborative editing tools. - -## Difference between HTTP & Websocket -**Connection Nature:** HTTP is stateless and request-response based, while WebSocket provides full-duplex communication with a persistent connection. - -**Communication Overhead:** HTTP requests are heavier in terms of header information compared to WebSocket, which maintains a lightweight header after the initial handshake. - -**Usage Scenarios:** HTTP is suitable for scenarios where data exchange is initiated by the client in a request-response fashion (like fetching web pages or making API calls). WebSocket is ideal for applications requiring real-time, bi-directional communication with low latency. - -## WebSocket API - -The WebSocket API provides methods and events for establishing and managing WebSocket connections... - -## WebSocket Protocol - -Unlike HTTP, WebSockets provide full-duplex communication over a single, long-lived connection... - -## Implementing WebSockets - -### Using WebSocket in Node.js - -```javascript -// Example Node.js WebSocket server -// Example Node.js WebSocket server - -const WebSocket = require('ws'); - -// Create a WebSocket server instance -const wss = new WebSocket.Server({ port: 8080 }); - -// WebSocket server listening event -wss.on('listening', () => { - console.log('WebSocket server is listening on port 8080'); -}); - -// WebSocket connection event -wss.on('connection', (ws) => { - console.log('A new client connected'); - - // Send a welcome message to the client - ws.send('Welcome to the WebSocket server!'); - - // WebSocket message event - ws.on('message', (message) => { - console.log(`Received message => ${message}`); - - // Broadcast the received message to all clients - wss.clients.forEach((client) => { - if (client.readyState === WebSocket.OPEN) { - client.send(`Broadcast: ${message}`); - } - }); - }); - - // WebSocket close event - ws.on('close', () => { - console.log('Client disconnected'); - }); - - // WebSocket error event - ws.on('error', (error) => { - console.error(`WebSocket error: ${error}`); - }); -}); - -// Handle WebSocket server errors -wss.on('error', (error) => { - console.error(`WebSocket server error: ${error}`); -}); -``` - -Client-Side Example: -To interact with this WebSocket server from a client, you would typically use JavaScript in a web browser: - -```html - - - - - WebSocket Client - - - -

WebSocket Client

- - - - -``` -## When to Use HTTP/REST Instead: - -**Stateless Operations:** If your application involves primarily stateless operations (like retrieving data from a database or serving static resources), HTTP/REST is more appropriate. - -**Caching and Proxies:** HTTP has built-in support for caching and works seamlessly with proxies, making it suitable for content delivery networks (CDNs) and distributed systems. - -**Compatibility:** HTTP endpoints are easier to integrate with existing infrastructure and can be accessed from a wide range of clients (browsers, mobile apps, etc.). - -## Conclusion -While HTTP/REST is excellent for many types of client-server interactions and resource fetching, WebSocket is indispensable for real-time applications and scenarios where low-latency, bidirectional communication is necessary. Choosing between them depends on the specific requirements and nature of your application. diff --git a/docs/javascript/data-types/primitive-types/number.md b/docs/javascript/data-types/primitive-types/number.md index e69de29bb..2021e382d 100644 --- a/docs/javascript/data-types/primitive-types/number.md +++ b/docs/javascript/data-types/primitive-types/number.md @@ -0,0 +1,344 @@ +--- +id: number +title: Numbers in JavaScript +sidebar_label: Number +sidebar_position: 3 +tags: [javascript, data type, primitive type, number] +description: Learn about the number data type in JavaScript, how to create number values, and common operations with number values. +--- + + + +Numbers are a crucial part of any programming language, and JavaScript is no exception. In JavaScript, numbers are used to perform calculations, manipulate data, and handle various operations. This tutorial will walk you through everything you need to know about numbers in JavaScript, from basic concepts to advanced usage. + +## What Is a Number in JavaScript? + +In JavaScript, the `number` data type represents numeric values, including integers and floating-point numbers. Numbers in JavaScript are used to perform arithmetic operations, store numerical data, and represent quantities in various contexts. + +Here are some key points about numbers in JavaScript: + +- Numbers can be positive, negative, or zero. +- Numbers can be integers (whole numbers) or floating-point numbers (numbers with decimal points). +- JavaScript uses the `number` data type to represent all numeric values, regardless of whether they are integers or floating-point numbers. +- Numbers in JavaScript are stored as 64-bit floating-point values using the [IEEE 754 standard](https://en.wikipedia.org/wiki/IEEE_754). +- JavaScript provides built-in functions and operators for performing arithmetic operations, comparisons, and other operations with numbers. + +**Example:** + +```javascript title="app.js" +let integerNumber = 42; // Integer number +let floatingPointNumber = 3.14; // Floating-point number + +console.log(integerNumber); // Output: 42 +console.log(floatingPointNumber); // Output: 3.14 +``` + +In the example above, `integerNumber` is an integer value (`42`), and `floatingPointNumber` is a floating-point value (`3.14`). Both values are stored as `number` data types in JavaScript. + +## Types of Numbers in JavaScript + +### 1. Integers + +Integers are whole numbers without any decimal points. In JavaScript, integers can be positive, negative, or zero. The `number` data type in JavaScript can represent integer values within a certain range. + +**Example:** + +```javascript title="app.js" +let positiveInteger = 42; // Positive integer +let negativeInteger = -10; // Negative integer +let zero = 0; // Zero + +console.log(positiveInteger); // Output: 42 +console.log(negativeInteger); // Output: -10 +console.log(zero); // Output: 0 +``` + +### 2. Floating-Point Numbers + +Floating-point numbers are numbers with decimal points. In JavaScript, floating-point numbers can represent fractional values, scientific notation, and other real numbers. The `number` data type in JavaScript can represent floating-point values with a certain precision. + +**Example:** + +```javascript title="app.js" +let pi = 3.14159; // Pi (π) approximation + +console.log(pi); // Output: 3.14159 +``` + +### 3. Scientific Notation + +JavaScript supports scientific notation for representing very large or very small numbers. Scientific notation uses the `e` character to denote the exponent of a number. + +**Example:** + +```javascript title="app.js" +let largeNumber = 5e6; // 5 million, equivalent to 5 * 10^6 +let smallNumber = 5e-6; // 0.000005, equivalent to 5 * 10^-6 + +console.log(largeNumber); // Outputs: 5000000 +console.log(smallNumber); // Outputs: 0.000005 +``` + +In the examples above, `5e6` represents `5` multiplied by `10` raised to the power of `6` (i.e., `5,000,000`), and `5e-6` represents `5` multiplied by `10` raised to the power of `-6` (i.e., `0.000005`). + +## Number Precision + +JavaScript numbers are precise up to 15 digits. Beyond this, precision may be lost, and the results of calculations might not be what you expect. + +**Example:** + +```javascript title="app.js" +let preciseNumber = 0.1 + 0.2; +console.log(preciseNumber); // Outputs: 0.30000000000000004 +``` + +In the example above, adding `0.1` and `0.2` results in `0.30000000000000004` due to the limited precision of JavaScript numbers. + +## Special Numeric Values + +JavaScript provides special numeric values to represent exceptional cases, such as `Infinity`, `-Infinity`, and `NaN` (Not-a-Number). + +### 1. Infinity + +The `Infinity` value represents positive infinity in JavaScript. It is used to denote a value that exceeds the upper limit of representable numbers. + +**Example:** + +```javascript title="app.js" +let positiveInfinity = Infinity; + +console.log(positiveInfinity); // Output: Infinity +console.log(positiveInfinity + 1); // Output: Infinity +``` + +### 2. -Infinity + +The `-Infinity` value represents negative infinity in JavaScript. It is used to denote a value that exceeds the lower limit of representable numbers. + +**Example:** + +```javascript title="app.js" +let negativeInfinity = -Infinity; + +console.log(negativeInfinity); // Output: -Infinity +console.log(negativeInfinity - 1); // Output: -Infinity +``` + +### 3. NaN (Not-a-Number) + +The `NaN` value represents a special "not-a-number" value in JavaScript. It is used to denote the result of an invalid mathematical operation, such as dividing zero by zero. + +**Example:** + +```javascript title="app.js" +let notANumber = NaN; + +console.log(notANumber); // Output: NaN +console.log(0 / 0); // Output: NaN +``` + +## Number Methods + +JavaScript provides built-in methods for working with numbers. These methods can be used to perform various operations, such as rounding numbers, converting numbers to strings, and generating random numbers. + +Here are some common number methods in JavaScript: + +### 1. `toFixed()` + +The `toFixed()` method formats a number using fixed-point notation with a specified number of decimal places. + +**Example:** + +```javascript title="app.js" +let number = 3.14159; +let formattedNumber = number.toFixed(2); + +console.log(formattedNumber); // Output: 3.14 +``` + +### 2. `toString()` + +The `toString()` method converts a number to a string representation. + +**Example:** + +```javascript title="app.js" +let number = 42; + +console.log(number.toString()); // Output: "42" +``` + +### 3. `parseInt()` + +The `parseInt()` function parses a string and returns an integer. + +**Example:** + +```javascript title="app.js" +let number = parseInt("42"); + +console.log(number); // Output: 42 +``` + +### 4. `parseFloat()` + +The `parseFloat()` function parses a string and returns a floating-point number. + +**Example:** + +```javascript title="app.js" +let number = parseFloat("3.14"); + +console.log(number); // Output: 3.14 +``` + +### 5. `Math.random()` + +The `Math.random()` function generates a random floating-point number between 0 (inclusive) and 1 (exclusive). + +**Example:** + +```javascript title="app.js" +let randomNumber = Math.random(); + +console.log(randomNumber); // Output: A random number between 0 and 1 +``` + +### 6. `toPrecision()` + +The `toPrecision()` method formats a number to a specified precision. + +**Example:** + +```javascript title="app.js" +let number = 123.456; + +console.log(number.toPrecision(2)); // Output: 1.2e+2 +``` + +### 7. `isNaN()` + +The `isNaN()` function checks if a value is `NaN` (Not-a-Number). + +**Example:** + +```javascript title="app.js" +console.log(isNaN(123)); // Outputs: false +console.log(isNaN("abc")); // Outputs: true +``` + +### 8. `isFinite()` + +The `isFinite()` function checks if a value is a finite number. + +**Example:** + +```javascript title="app.js" +console.log(isFinite(42)); // Outputs: true +console.log(isFinite(Infinity)); // Outputs: false +``` + +### 9. `Number()` + +The `Number()` function converts a value to a number. + +**Example:** + +```javascript title="app.js" +let str = "123"; +let num = Number(str); + +console.log(num); // Outputs: 123 +``` + +## Common Arithmetic Operations with Numbers + +JavaScript provides arithmetic operators for performing basic arithmetic operations with numbers. Here are some common arithmetic operations you can perform with numbers in JavaScript: + +### 1. Addition (`+`) + +The addition operator (`+`) is used to add two numbers together. + +**Example:** + +```javascript title="app.js" +let num1 = 10; +let num2 = 20; +let sum = num1 + num2; + +console.log(sum); // Output: 30 +``` + +### 2. Subtraction (`-`) + +The subtraction operator (`-`) is used to subtract one number from another. + +**Example:** + +```javascript title="app.js" +let num1 = 20; +let num2 = 10; +let difference = num1 - num2; + +console.log(difference); // Output: 10 +``` + +### 3. Multiplication (`*`) + +The multiplication operator (`*`) is used to multiply two numbers. + +**Example:** + +```javascript title="app.js" +let num1 = 5; +let num2 = 6; +let product = num1 * num2; + +console.log(product); // Output: 30 +``` + +### 4. Division (`/`) + +The division operator (`/`) is used to divide one number by another. + +**Example:** + +```javascript title="app.js" +let num1 = 20; +let num2 = 5; +let quotient = num1 / num2; + +console.log(quotient); // Output: 4 +``` + +### 5. Modulus (`%`) + +The modulus operator (`%`) is used to find the remainder of the division of two numbers. + +**Example:** + +```javascript title="app.js" +let num1 = 10; +let num2 = 3; +let remainder = num1 % num2; + +console.log(remainder); // Output: 1 +``` + +### 6. Exponentiation (`**`) + +The exponentiation operator (`**`) is used to raise one number to the power of another. + +**Example:** + +```javascript title="app.js" +let base = 2; +let exponent = 3; +let result = base ** exponent; + +console.log(result); // Output: 8 +``` + +## Conclusion + +Numbers are an essential part of JavaScript programming, used for calculations, data manipulation, and various operations. In this tutorial, you learned about the `number` data type in JavaScript, different types of numbers, special numeric values, number precision, number methods, and arithmetic operations with numbers. Understanding numbers in JavaScript will help you work with numeric data effectively and efficiently in your JavaScript applications. \ No newline at end of file From 59fadfed7e1facdb4c515029625df115d82bdb84 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Fri, 23 Aug 2024 15:28:55 +0000 Subject: [PATCH 2/6] Restyled by prettier-markdown --- blog/2024-03-15/prompt-engineering-guide.md | 3 +- .../index.md | 1150 ++++++++--------- blog/sed-normalize-md-file-with-regex.md | 2 +- .../data-types/primitive-types/number.md | 10 +- 4 files changed, 582 insertions(+), 583 deletions(-) diff --git a/blog/2024-03-15/prompt-engineering-guide.md b/blog/2024-03-15/prompt-engineering-guide.md index bd25488ab..aaba48902 100644 --- a/blog/2024-03-15/prompt-engineering-guide.md +++ b/blog/2024-03-15/prompt-engineering-guide.md @@ -17,7 +17,6 @@ The first step in creating an effective prompt is to define the goal you want to Once you have defined the goal, the next step is to identify the steps required to achieve that goal. Break down the goal into smaller, manageable steps that the user can follow to reach the desired outcome. This will help the user understand what they need to do and how to do it. - ## Step 3: Design the Prompt With the goal and steps identified, it's time to design the prompt. The prompt should be clear, concise, and easy to follow. Use simple language and provide clear instructions to guide the user through each step. You can use visual cues, such as arrows or icons, to help the user navigate the prompt. @@ -32,4 +31,4 @@ Once you have tested the prompt and made any necessary adjustments, it's time to ## Conclusion -Creating an effective prompt is a valuable skill that can help you guide users through complex tasks and achieve your desired outcomes. By following these steps, you can create a prompt that is clear, concise, and easy to follow, helping users complete tasks with ease and efficiency. Happy prompting! \ No newline at end of file +Creating an effective prompt is a valuable skill that can help you guide users through complex tasks and achieve your desired outcomes. By following these steps, you can create a prompt that is clear, concise, and easy to follow, helping users complete tasks with ease and efficiency. Happy prompting! diff --git a/blog/Building RESTful CRUD API in springboot/index.md b/blog/Building RESTful CRUD API in springboot/index.md index 10caa0461..bc36a6c95 100644 --- a/blog/Building RESTful CRUD API in springboot/index.md +++ b/blog/Building RESTful CRUD API in springboot/index.md @@ -1,575 +1,575 @@ ---- -title: 'Building a RESTful CRUD API with Spring Boot: A step by step guide' -sidebar_label: Springboot-REST-API-CRUD -authors: [dharshibalasubramaniyam] -tags: [springboot, rest-api] -date: 2024-06-25 -hide_table_of_contents: true ---- - -In this article, we will learn how to build a RESTful CRUD (Create, Read, Update, Delete) API using Spring Boot. We will cover everything from project setup to testing, demonstrating best practices and essential techniques along the way. By the end of this tutorial, you will have a solid understanding of how to architect, develop, and test RESTful APIs using Spring Boot. - - - -## What is RESTFUL API? -- In the realm of modern web development, RESTful APIs have become a cornerstone for building scalable, efficient, and maintainable web applications. - -- In the world of computers and the internet, applications communicate with each other using a set of rules. - -- RESTful APIs (Application Programming Interfaces) are act as intermediaries between different software applications (client and server), allowing them to communicate and share data with each other over the internet. - -- *Representational State Transfer (REST)*: This is a style of building software systems that use standard HTTP methods (like GET, POST, PUT, DELETE) to perform operations on resources (like data stored in a database). It emphasizes simplicity, scalability, and flexibility. - -- *API (Application Programming Interface)*: Think of an API as a set of rules and protocols that allow different software applications to talk to each other. It defines how different parts of software systems can interact and exchange data. - -- So, when we say a *“RESTful API”*, we’re talking about a set of rules and conventions that govern how applications communicate with each other over the internet using standard HTTP methods. - -## Why spring boot? -- Among the myriad of frameworks available for building RESTful APIs, Spring Boot stands out as a robust and developer-friendly option for Java developers. - -- Spring Boot makes it simple for developers to create web applications without getting bogged down in complex configuration. - -- With Spring Boot, you can quickly build and deploy applications, which is great for trying out ideas or making changes fast. - -- It comes with many useful tools and features ready to use, like handling data, security, and more, saving you time and effort. - -- Spring Boot can easily connect with other tools and libraries, making it flexible for different needs. -Motive of this article - -- In this comprehensive guide, we’ll delve into the process of creating a RESTful CRUD (Create, Read, Update, Delete) API for managing user data using Spring Boot and MySQL. We’ll cover everything from project setup to testing, demonstrating best practices and essential techniques along the way. By the end of this tutorial, you’ll have a solid understanding of how to architect, develop RESTful APIs using Spring Boot. - -- Without further ado, let’s embark on this journey of building a RESTful user CRUD API with Spring Boot. - -### To build a Spring Boot project, you’ll need a few prerequisites: - -- Java Development Kit (JDK): Spring Boot applications are typically written in Java, so you’ll need to have the JDK installed on your system. Spring Boot supports Java 8 and newer versions, so make sure you have a compatible JDK installed. - -- Integrated Development Environment (IDE): While you can build Spring Boot applications using a simple text editor and command-line tools, using an IDE can greatly enhance your productivity. Popular choices include IntelliJ IDEA, Eclipse, and Spring Tool Suite (STS). - -- Build Tool: Spring Boot projects are typically built using either Maven or Gradle. Maven is more commonly used, but Gradle offers some advantages in terms of flexibility and performance. Choose whichever build tool you’re more comfortable with. - -- Understanding of Java: While you don’t need to be an expert, it’s beneficial to have a basic understanding of Java programming. - -- Database Knowledge (Optional): Having some knowledge of database concepts and SQL can be beneficial. Spring Boot supports various databases, including MySQL, PostgreSQL, MongoDB, and more. - -## Step 1: Setting up project. - -- Visit spring initializer and fill in all the details accordingly and at last click on the GENERATE button. Extract the zip file and import it into your IDE. - - ![img-03](./images/image01.png) - -### 1.1. Add below dependencies in pom.xml file. - -``` - - // we'll use this dependency to create RESTful API endpoints, - // handle HTTP requests (GET, POST, PUT, DELETE), and return JSON responses. - - org.springframework.boot - spring-boot-starter-web - - - // we'll use this dependency to interact with a database, - // define JPA entities (data models), perform CRUD operations, - // and execute custom database queries. - - org.springframework.boot - spring-boot-starter-data-jpa - - - // we'll use this dependency to establish a connection to - // our MySQL database, execute SQL queries, and manage database transactions. - - mysql - mysql-connector-java - 8.0.33 - runtime - - - // we'll use Lombok annotations (such as @Data, @Getter, @Setter) - // in our Java classes to automatically generate common methods, - // making your code cleaner and more concise. - - org.projectlombok - lombok - true - - - // we'll use this dependency to annotate your Java model classes - // with validation constraints (e.g., @NotBlank, @NotNull, @Size) - // and automatically validate request data in your RESTful API endpoints. - - org.springframework.boot - spring-boot-starter-validation - - - -``` - - -### 1.2. Update application.properties file - -``` -spring.jpa.hibernate.ddl-auto=update -spring.datasource.url=jdbc:mysql://localhost:3306/usercrud -spring.datasource.username=your localhost username -spring.datasource.password=your localhost password -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -``` - -## Step 2: Create project structure. - -- Create below folder structure inside src folder. We’ll travel through each file one by one. - - ![img-03](./images/image02.png) - -## Step 3: Create User Model - -- Models define the structure and attributes of the data entities that the application manages. - -- For example, a User model might include attributes like id, username, email, and password. - -- Models often include annotations or custom logic to validate the data before it is persisted to the database. For example, you might use annotations like `@NotBlank`, `@Email`, or `@Size` to enforce constraints on the data. - -- Models are typically mapped to database tables using Object-Relational Mapping (ORM) frameworks like Hibernate in Spring Boot applications. They define the structure of the database tables and establish relationships between entities. - -```java -// User.java - -@Data -@AllArgsConstructor -@NoArgsConstructor -@Entity -@Table(uniqueConstraints = { - @UniqueConstraint(columnNames = "username"), - @UniqueConstraint(columnNames = "email") -}) -public class User { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @NotBlank - @Size(min=3, max = 20) - private String username; - - @NotBlank - @Email - private String email; - - @NotBlank - @Size(min=10, max = 10) - private String phone; - - private LocalDateTime regDateAndTime; - -} -``` - -## Step 4: Create DTO classes - -- DTOs (Data Transfer Objects) play a crucial role in Spring Boot CRUD applications by providing a flexible and efficient mechanism for transferring data between layers (Client and Server), optimizing performance, encapsulating business logic, ensuring compatibility, and enhancing security and privacy. - -```java -// ApiResponseDto.java - -@Data -@AllArgsConstructor -public class ApiResponseDto { - private String status; - private T response; - -} - -// ApiResponseStatus.java - -public enum ApiResponseStatus { - SUCCESS, - FAIL -} - -// UserRegistrationDTO.java - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class UserRegistrationDTO { - - @NotBlank(message = "Username is required!") - @Size(min= 3, message = "Username must have atleast 3 characters!") - @Size(max= 20, message = "Username can have have atmost 20 characters!") - private String userName; - - @Email(message = "Email is not in valid format!") - @NotBlank(message = "Email is required!") - private String email; - - @NotBlank(message = "Phone number is required!") - @Size(min = 10, max = 10, message = "Phone number must have 10 characters!") - @Pattern(regexp="^[0-9]*$", message = "Phone number must contain only digits") - private String phone; - -} -``` - -## Step 5: Create Exception classes - -- Custom exceptions help to improve the clarity and maintainability of the code by providing specific error handling for common scenarios encountered in a CRUD application. -- They allow developers to handle exceptional cases gracefully and communicate errors effectively. - -```java -// UserNotFoundException.java - -// This exception is thrown when attempting to retrieve a user from the database, but the user does not exist. -public class UserNotFoundException extends Exception{ - public UserNotFoundException(String message) { - super(message); - } -} - - -// UserAlreadyExistsException.java - -// This exception is thrown when attempting to create a new user, but a user with the same identifier (e.g., username, email) already exists in the database. -public class UserAlreadyExistsException extends Exception{ - public UserAlreadyExistsException(String message) { - super(message); - } -} - - -// UserServiceLogicException.java - -// This exception serves as a generic exception for any unexpected errors or business logic violations that occur within the user service layer. -public class UserServiceLogicException extends Exception{ - public UserServiceLogicException() { - super("Something went wrong. Please try again later!"); - } -} -``` - -## Step 6: Create User Repository Interface - -- Repository interfaces abstract the details of data access. Instead of directly interacting with data storage mechanisms (such as databases), you define repository interfaces to declare methods for common CRUD (Create, Read, Update, Delete) operations. - -- JpaRepository is a part of Spring Data JPA and provides CRUD (Create, Read, Update, Delete) operations for the User entity. - -- The first generic parameter User specifies the entity class that this repository manages, implying that User is an entity class. - -- The second generic parameter Integer specifies the type of the primary key of the User entity. - -```java -// UserRepository.java - -@Repository -public interface UserRepository extends JpaRepository { - - // Developers can define methods in repository interfaces with custom query keywords, - // and Spring Data JPA automatically translates them into appropriate SQL queries. - User findByEmail(String email); - - User findByUsername(String userName); - - List findAllByOrderByRegDateTimeDesc(); - -} -``` - -- By extending JpaRepository, UserRepository inherits methods for performing various database operations such as saving, deleting, finding, etc., without needing to write these methods explicitly. These methods are provided by Spring Data JPA based on the naming convention of the methods in the repository interface. - -## Step 7: Create User Service class - -- Service classes in Spring Boot CRUD applications serve as the backbone for implementing business logic, managing transactions, abstracting data access, centralizing business rules, promoting reusability, and handling errors effectively. - -- By placing business logic within service classes, you centralize the rules governing your application’s behavior. This makes it easier to maintain and modify the behavior of your application without having to hunt down logic scattered across different parts of the codebase. - -```java -@Service -public interface UserService { - - ResponseEntity> registerUser(UserDetailsRequestDto newUserDetails) - throws UserAlreadyExistsException, UserServiceLogicException; - - ResponseEntity> getAllUsers() - throws UserServiceLogicException; - - ResponseEntity> updateUser(UserDetailsRequestDto newUserDetails, int id) - throws UserNotFoundException, UserServiceLogicException; - - ResponseEntity> deleteUser(int id) - throws UserServiceLogicException, UserNotFoundException; - -} -``` - -```java -@Component -@Slf4j -public class UserServiceImpl implements UserService{ - - @Autowired - private UserRepository userRepository; - - @Override - public ResponseEntity> registerUser(UserDetailsRequestDto newUserDetails) - throws UserAlreadyExistsException, UserServiceLogicException { - - // logic to register user - } - - @Override - public ResponseEntity> getAllUsers() throws UserServiceLogicException { - // logic to get all users - } - - @Override - public ResponseEntity> updateUser(UserDetailsRequestDto newUserDetails, int id) - throws UserNotFoundException, UserServiceLogicException { - // logic to update user - } - - @Override - public ResponseEntity> deleteUser(int id) throws UserServiceLogicException, UserNotFoundException { - // logic to delete user - } -} -``` - -- Now let’s see how we can implement each of the methods in UserServiceImpl separately. - -```java -@Override -public ResponseEntity> registerUser(UserDetailsRequestDto newUserDetails) - throws UserAlreadyExistsException, UserServiceLogicException { - - try { - if (userRepository.findByEmail(newUserDetails.getEmail()) != null){ - throw new UserAlreadyExistsException("Registration failed: User already exists with email " newUserDetails.getEmail()); - } - if (userRepository.findByUsername(newUserDetails.getUserName()) != null){ - throw new UserAlreadyExistsException("Registration failed: User already exists with username " newUserDetails.getUserName()); - } - - User newUser = new User( - newUserDetails.getUserName(), newUserDetails.getEmail(), newUserDetails.getPhone(), LocalDateTime.no() - ); - - // save() is an in built method given by JpaRepository - userRepository.save(newUser); - - return ResponseEntity - .status(HttpStatus.CREATED) - .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), "New user account has been successfully created!")); - - }catch (UserAlreadyExistsException e) { - throw new UserAlreadyExistsException(e.getMessage()); - }catch (Exception e) { - log.error("Failed to create new user account: " + e.getMessage()); - throw new UserServiceLogicException(); - } -} -``` - -```java -@Override -public ResponseEntity> getAllUsers() throws UserServiceLogicException { - try { - List users = userRepository.findAllByOrderByRegDateTimeDesc(); - - return ResponseEntity - .status(HttpStatus.OK) - .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), users) - ); - - }catch (Exception e) { - log.error("Failed to fetch all users: " + e.getMessage()); - throw new UserServiceLogicException(); - } -} -``` - -```java -@Override -public ResponseEntity> updateUser(UserDetailsRequestDto newUserDetails, int id) - throws UserNotFoundException, UserServiceLogicException { - try { - User user = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("User not found with id " + id)); - - user.setEmail(newUserDetails.getEmail()); - user.setUsername(newUserDetails.getUserName()); - user.setPhone(newUserDetails.getPhone()); - - userRepository.save(user); - - return ResponseEntity - .status(HttpStatus.OK) - .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), "User account updated successfully!") - ); - - }catch(UserNotFoundException e){ - throw new UserNotFoundException(e.getMessage()); - }catch(Exception e) { - log.error("Failed to update user account: " + e.getMessage()); - throw new UserServiceLogicException(); - } - } -``` - -```java -@Override -public ResponseEntity> deleteUser(int id) throws UserServiceLogicException, UserNotFoundException { - try { - User user = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("User not found with id " + id)); - - userRepository.delete(user); - - return ResponseEntity - .status(HttpStatus.OK) - .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), "User account deleted successfully!") - ); - } catch (UserNotFoundException e) { - throw new UserNotFoundException(e.getMessage()); - } catch (Exception e) { - log.error("Failed to delete user account: " + e.getMessage()); - throw new UserServiceLogicException(); - } -} -``` - -:::note -- The `@Service` annotation is used to indicate that a class is a service component in the Spring application context. - -- The `@Component` annotation is a generic stereotype annotation used to indicate that a class is a Spring component. Components annotated with @Component are candidates for auto-detection when using Spring's component scanning feature. - -- The `@Autowired` annotation is used to automatically inject dependencies into Spring-managed beans. When Spring encounters a bean annotated with @Autowired, it looks for other beans in the application context that match the type of the dependency and injects it. - -- The `@Slf4j` annotation is not a standard Spring annotation but rather a Lombok annotation used for logging. -::: - -## Step 8: Create controller - -- A controller class in a Spring Boot application is responsible for handling incoming HTTP requests and returning appropriate HTTP responses. - -- It serves as an entry point for processing client requests and often delegates the actual business logic to service classes. - -- A controller class is typically annotated with @RestController or @Controller. -Inside the controller class, you define methods that handle specific HTTP requests. These methods are annotated with `@RequestMapping`, `@GetMapping`, `@PostMapping`, `@PutMapping`, `@DeleteMapping`, or other similar annotations to specify the HTTP method and the URL path that the method should respond to. - -- Each method in the controller class represents a particular endpoint of the REST API. - -- Controller classes often rely on service classes to perform business logic. Dependencies on these service classes are typically injected using the @Autowired annotation or constructor injection. - -- Controller methods return the response to the client. This can be done by returning a ResponseEntity object to have more control over the response status code, headers, and body. - -```java -@RestController -@RequestMapping("/users") -public class UserController { - - @Autowired - public UserService userService; - - @PostMapping("/new") - public ResponseEntity> registerUser(@Valid @RequestBody UserDetailsRequestDto userDetailsRequestDto) throws UserAlreadyExistsException, UserServiceLogicException { - return userService.registerUser(userDetailsRequestDto); - } - - @GetMapping("/get/all") - public ResponseEntity> getAllUsers() throws UserServiceLogicException { - return userService.getAllUsers(); - } - - @PutMapping("/update/{id}") - public ResponseEntity> updateUser(@Valid @RequestBody UserDetailsRequestDto userDetailsRequestDto, @PathVariable int id) - throws UserNotFoundException, UserServiceLogicException { - return userService.updateUser(userDetailsRequestDto, id); - } - - @DeleteMapping("/delete/{id}") - public ResponseEntity> deleteUser(@PathVariable int id) - throws UserNotFoundException, UserServiceLogicException { - return userService.deleteUser(id); - } - -} -``` - -:::note - -- The `@PathVariable` annotation is used to extract values from the URI template of the incoming request. E.g., updateUser method. - -- The `@RequestParam` annotation is used to extract query parameters from the URL of the incoming request. - -- The `@RequestBody` annotation is used to extract the request body of the incoming HTTP request. It binds the body of the request to a method parameter in a controller method, typically for POST, PUT, and PATCH requests. E.g., registerUser method. -::: - -## Step 9: Create Exception Handler class - -- Exception handlers in Spring Boot applications are used to handle exceptions thrown during the processing of HTTP requests. - -- They allow you to centralize error handling logic and provide custom responses to clients when errors occur. - -- `@RestControllerAdvice` annotation is used to indicate that the class contains advice that applies to all controllers. This advice will be applied globally to handle exceptions thrown from any controller in the application. - -- To create an exception handler, you annotate a method within a controller class with @ExceptionHandler and specify the type(s) of exceptions it can handle. - -```java -// UserServiceExceptionHandler.java - -@RestControllerAdvice -public class UserServiceExceptionHandler { - - @ExceptionHandler(value = UserNotFoundException.class) - public ResponseEntity> UserNotFoundExceptionHandler(UserNotFoundException exception) { - return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ApiResponseDto<>(ApiResponseStatus.FAIL.name(), exception.getMessage())); - } - - @ExceptionHandler(value = UserAlreadyExistsException.class) - public ResponseEntity> UserAlreadyExistsExceptionHandler(UserAlreadyExistsException exception) { - return ResponseEntity.status(HttpStatus.CONFLICT).body(new ApiResponseDto<>(ApiResponseStatus.FAIL.name(), exception.getMessage())); - } - - @ExceptionHandler(value = UserServiceLogicException.class) - public ResponseEntity> UserServiceLogicExceptionHandler(UserServiceLogicException exception) { - return ResponseEntity.badRequest().body(new ApiResponseDto<>(ApiResponseStatus.FAIL.name(), exception.getMessage())); - } - - @ExceptionHandler(value = MethodArgumentNotValidException.class) - public ResponseEntity> MethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException exception) { - - List errorMessage = new ArrayList<>(); - - exception.getBindingResult().getFieldErrors().forEach(error -> { - errorMessage.add(error.getDefaultMessage()); - }); - return ResponseEntity.badRequest().body(new ApiResponseDto<>(ApiResponseStatus.FAIL.name(), errorMessage.toString())); - } - -} -``` - -## Step 10: Run your application and test with postman/frontend😊. - -Register user failed: User details invalid! - -![img-03](./images/image03.png) - -Register user successful - -![img-04](./images/image04.png) - - -Retrieve all users - -![img-05](./images/image05.png) - - -Update the details of John - -![img-06](./images/image06.png) - -Delete user john - -![img-07](./images/image07.png) - -Hey guys, that’s it. We have successfully developed rest crud API for a user management system. +--- +title: "Building a RESTful CRUD API with Spring Boot: A step by step guide" +sidebar_label: Springboot-REST-API-CRUD +authors: [dharshibalasubramaniyam] +tags: [springboot, rest-api] +date: 2024-06-25 +hide_table_of_contents: true +--- + +In this article, we will learn how to build a RESTful CRUD (Create, Read, Update, Delete) API using Spring Boot. We will cover everything from project setup to testing, demonstrating best practices and essential techniques along the way. By the end of this tutorial, you will have a solid understanding of how to architect, develop, and test RESTful APIs using Spring Boot. + + + +## What is RESTFUL API? + +- In the realm of modern web development, RESTful APIs have become a cornerstone for building scalable, efficient, and maintainable web applications. + +- In the world of computers and the internet, applications communicate with each other using a set of rules. + +- RESTful APIs (Application Programming Interfaces) are act as intermediaries between different software applications (client and server), allowing them to communicate and share data with each other over the internet. + +- _Representational State Transfer (REST)_: This is a style of building software systems that use standard HTTP methods (like GET, POST, PUT, DELETE) to perform operations on resources (like data stored in a database). It emphasizes simplicity, scalability, and flexibility. + +- _API (Application Programming Interface)_: Think of an API as a set of rules and protocols that allow different software applications to talk to each other. It defines how different parts of software systems can interact and exchange data. + +- So, when we say a _“RESTful API”_, we’re talking about a set of rules and conventions that govern how applications communicate with each other over the internet using standard HTTP methods. + +## Why spring boot? + +- Among the myriad of frameworks available for building RESTful APIs, Spring Boot stands out as a robust and developer-friendly option for Java developers. + +- Spring Boot makes it simple for developers to create web applications without getting bogged down in complex configuration. + +- With Spring Boot, you can quickly build and deploy applications, which is great for trying out ideas or making changes fast. + +- It comes with many useful tools and features ready to use, like handling data, security, and more, saving you time and effort. + +- Spring Boot can easily connect with other tools and libraries, making it flexible for different needs. + Motive of this article + +- In this comprehensive guide, we’ll delve into the process of creating a RESTful CRUD (Create, Read, Update, Delete) API for managing user data using Spring Boot and MySQL. We’ll cover everything from project setup to testing, demonstrating best practices and essential techniques along the way. By the end of this tutorial, you’ll have a solid understanding of how to architect, develop RESTful APIs using Spring Boot. + +- Without further ado, let’s embark on this journey of building a RESTful user CRUD API with Spring Boot. + +### To build a Spring Boot project, you’ll need a few prerequisites: + +- Java Development Kit (JDK): Spring Boot applications are typically written in Java, so you’ll need to have the JDK installed on your system. Spring Boot supports Java 8 and newer versions, so make sure you have a compatible JDK installed. + +- Integrated Development Environment (IDE): While you can build Spring Boot applications using a simple text editor and command-line tools, using an IDE can greatly enhance your productivity. Popular choices include IntelliJ IDEA, Eclipse, and Spring Tool Suite (STS). + +- Build Tool: Spring Boot projects are typically built using either Maven or Gradle. Maven is more commonly used, but Gradle offers some advantages in terms of flexibility and performance. Choose whichever build tool you’re more comfortable with. + +- Understanding of Java: While you don’t need to be an expert, it’s beneficial to have a basic understanding of Java programming. + +- Database Knowledge (Optional): Having some knowledge of database concepts and SQL can be beneficial. Spring Boot supports various databases, including MySQL, PostgreSQL, MongoDB, and more. + +## Step 1: Setting up project. + +- Visit spring initializer and fill in all the details accordingly and at last click on the GENERATE button. Extract the zip file and import it into your IDE. + + ![img-03](./images/image01.png) + +### 1.1. Add below dependencies in pom.xml file. + +``` + + // we'll use this dependency to create RESTful API endpoints, + // handle HTTP requests (GET, POST, PUT, DELETE), and return JSON responses. + + org.springframework.boot + spring-boot-starter-web + + + // we'll use this dependency to interact with a database, + // define JPA entities (data models), perform CRUD operations, + // and execute custom database queries. + + org.springframework.boot + spring-boot-starter-data-jpa + + + // we'll use this dependency to establish a connection to + // our MySQL database, execute SQL queries, and manage database transactions. + + mysql + mysql-connector-java + 8.0.33 + runtime + + + // we'll use Lombok annotations (such as @Data, @Getter, @Setter) + // in our Java classes to automatically generate common methods, + // making your code cleaner and more concise. + + org.projectlombok + lombok + true + + + // we'll use this dependency to annotate your Java model classes + // with validation constraints (e.g., @NotBlank, @NotNull, @Size) + // and automatically validate request data in your RESTful API endpoints. + + org.springframework.boot + spring-boot-starter-validation + + + +``` + +### 1.2. Update application.properties file + +``` +spring.jpa.hibernate.ddl-auto=update +spring.datasource.url=jdbc:mysql://localhost:3306/usercrud +spring.datasource.username=your localhost username +spring.datasource.password=your localhost password +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +``` + +## Step 2: Create project structure. + +- Create below folder structure inside src folder. We’ll travel through each file one by one. + + ![img-03](./images/image02.png) + +## Step 3: Create User Model + +- Models define the structure and attributes of the data entities that the application manages. + +- For example, a User model might include attributes like id, username, email, and password. + +- Models often include annotations or custom logic to validate the data before it is persisted to the database. For example, you might use annotations like `@NotBlank`, `@Email`, or `@Size` to enforce constraints on the data. + +- Models are typically mapped to database tables using Object-Relational Mapping (ORM) frameworks like Hibernate in Spring Boot applications. They define the structure of the database tables and establish relationships between entities. + +```java +// User.java + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(uniqueConstraints = { + @UniqueConstraint(columnNames = "username"), + @UniqueConstraint(columnNames = "email") +}) +public class User { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @NotBlank + @Size(min=3, max = 20) + private String username; + + @NotBlank + @Email + private String email; + + @NotBlank + @Size(min=10, max = 10) + private String phone; + + private LocalDateTime regDateAndTime; + +} +``` + +## Step 4: Create DTO classes + +- DTOs (Data Transfer Objects) play a crucial role in Spring Boot CRUD applications by providing a flexible and efficient mechanism for transferring data between layers (Client and Server), optimizing performance, encapsulating business logic, ensuring compatibility, and enhancing security and privacy. + +```java +// ApiResponseDto.java + +@Data +@AllArgsConstructor +public class ApiResponseDto { + private String status; + private T response; + +} + +// ApiResponseStatus.java + +public enum ApiResponseStatus { + SUCCESS, + FAIL +} + +// UserRegistrationDTO.java + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserRegistrationDTO { + + @NotBlank(message = "Username is required!") + @Size(min= 3, message = "Username must have atleast 3 characters!") + @Size(max= 20, message = "Username can have have atmost 20 characters!") + private String userName; + + @Email(message = "Email is not in valid format!") + @NotBlank(message = "Email is required!") + private String email; + + @NotBlank(message = "Phone number is required!") + @Size(min = 10, max = 10, message = "Phone number must have 10 characters!") + @Pattern(regexp="^[0-9]*$", message = "Phone number must contain only digits") + private String phone; + +} +``` + +## Step 5: Create Exception classes + +- Custom exceptions help to improve the clarity and maintainability of the code by providing specific error handling for common scenarios encountered in a CRUD application. +- They allow developers to handle exceptional cases gracefully and communicate errors effectively. + +```java +// UserNotFoundException.java + +// This exception is thrown when attempting to retrieve a user from the database, but the user does not exist. +public class UserNotFoundException extends Exception{ + public UserNotFoundException(String message) { + super(message); + } +} + + +// UserAlreadyExistsException.java + +// This exception is thrown when attempting to create a new user, but a user with the same identifier (e.g., username, email) already exists in the database. +public class UserAlreadyExistsException extends Exception{ + public UserAlreadyExistsException(String message) { + super(message); + } +} + + +// UserServiceLogicException.java + +// This exception serves as a generic exception for any unexpected errors or business logic violations that occur within the user service layer. +public class UserServiceLogicException extends Exception{ + public UserServiceLogicException() { + super("Something went wrong. Please try again later!"); + } +} +``` + +## Step 6: Create User Repository Interface + +- Repository interfaces abstract the details of data access. Instead of directly interacting with data storage mechanisms (such as databases), you define repository interfaces to declare methods for common CRUD (Create, Read, Update, Delete) operations. + +- JpaRepository is a part of Spring Data JPA and provides CRUD (Create, Read, Update, Delete) operations for the User entity. + +- The first generic parameter User specifies the entity class that this repository manages, implying that User is an entity class. + +- The second generic parameter Integer specifies the type of the primary key of the User entity. + +```java +// UserRepository.java + +@Repository +public interface UserRepository extends JpaRepository { + + // Developers can define methods in repository interfaces with custom query keywords, + // and Spring Data JPA automatically translates them into appropriate SQL queries. + User findByEmail(String email); + + User findByUsername(String userName); + + List findAllByOrderByRegDateTimeDesc(); + +} +``` + +- By extending JpaRepository, UserRepository inherits methods for performing various database operations such as saving, deleting, finding, etc., without needing to write these methods explicitly. These methods are provided by Spring Data JPA based on the naming convention of the methods in the repository interface. + +## Step 7: Create User Service class + +- Service classes in Spring Boot CRUD applications serve as the backbone for implementing business logic, managing transactions, abstracting data access, centralizing business rules, promoting reusability, and handling errors effectively. + +- By placing business logic within service classes, you centralize the rules governing your application’s behavior. This makes it easier to maintain and modify the behavior of your application without having to hunt down logic scattered across different parts of the codebase. + +```java +@Service +public interface UserService { + + ResponseEntity> registerUser(UserDetailsRequestDto newUserDetails) + throws UserAlreadyExistsException, UserServiceLogicException; + + ResponseEntity> getAllUsers() + throws UserServiceLogicException; + + ResponseEntity> updateUser(UserDetailsRequestDto newUserDetails, int id) + throws UserNotFoundException, UserServiceLogicException; + + ResponseEntity> deleteUser(int id) + throws UserServiceLogicException, UserNotFoundException; + +} +``` + +```java +@Component +@Slf4j +public class UserServiceImpl implements UserService{ + + @Autowired + private UserRepository userRepository; + + @Override + public ResponseEntity> registerUser(UserDetailsRequestDto newUserDetails) + throws UserAlreadyExistsException, UserServiceLogicException { + + // logic to register user + } + + @Override + public ResponseEntity> getAllUsers() throws UserServiceLogicException { + // logic to get all users + } + + @Override + public ResponseEntity> updateUser(UserDetailsRequestDto newUserDetails, int id) + throws UserNotFoundException, UserServiceLogicException { + // logic to update user + } + + @Override + public ResponseEntity> deleteUser(int id) throws UserServiceLogicException, UserNotFoundException { + // logic to delete user + } +} +``` + +- Now let’s see how we can implement each of the methods in UserServiceImpl separately. + +```java +@Override +public ResponseEntity> registerUser(UserDetailsRequestDto newUserDetails) + throws UserAlreadyExistsException, UserServiceLogicException { + + try { + if (userRepository.findByEmail(newUserDetails.getEmail()) != null){ + throw new UserAlreadyExistsException("Registration failed: User already exists with email " newUserDetails.getEmail()); + } + if (userRepository.findByUsername(newUserDetails.getUserName()) != null){ + throw new UserAlreadyExistsException("Registration failed: User already exists with username " newUserDetails.getUserName()); + } + + User newUser = new User( + newUserDetails.getUserName(), newUserDetails.getEmail(), newUserDetails.getPhone(), LocalDateTime.no() + ); + + // save() is an in built method given by JpaRepository + userRepository.save(newUser); + + return ResponseEntity + .status(HttpStatus.CREATED) + .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), "New user account has been successfully created!")); + + }catch (UserAlreadyExistsException e) { + throw new UserAlreadyExistsException(e.getMessage()); + }catch (Exception e) { + log.error("Failed to create new user account: " + e.getMessage()); + throw new UserServiceLogicException(); + } +} +``` + +```java +@Override +public ResponseEntity> getAllUsers() throws UserServiceLogicException { + try { + List users = userRepository.findAllByOrderByRegDateTimeDesc(); + + return ResponseEntity + .status(HttpStatus.OK) + .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), users) + ); + + }catch (Exception e) { + log.error("Failed to fetch all users: " + e.getMessage()); + throw new UserServiceLogicException(); + } +} +``` + +```java +@Override +public ResponseEntity> updateUser(UserDetailsRequestDto newUserDetails, int id) + throws UserNotFoundException, UserServiceLogicException { + try { + User user = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("User not found with id " + id)); + + user.setEmail(newUserDetails.getEmail()); + user.setUsername(newUserDetails.getUserName()); + user.setPhone(newUserDetails.getPhone()); + + userRepository.save(user); + + return ResponseEntity + .status(HttpStatus.OK) + .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), "User account updated successfully!") + ); + + }catch(UserNotFoundException e){ + throw new UserNotFoundException(e.getMessage()); + }catch(Exception e) { + log.error("Failed to update user account: " + e.getMessage()); + throw new UserServiceLogicException(); + } + } +``` + +```java +@Override +public ResponseEntity> deleteUser(int id) throws UserServiceLogicException, UserNotFoundException { + try { + User user = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("User not found with id " + id)); + + userRepository.delete(user); + + return ResponseEntity + .status(HttpStatus.OK) + .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), "User account deleted successfully!") + ); + } catch (UserNotFoundException e) { + throw new UserNotFoundException(e.getMessage()); + } catch (Exception e) { + log.error("Failed to delete user account: " + e.getMessage()); + throw new UserServiceLogicException(); + } +} +``` + +:::note + +- The `@Service` annotation is used to indicate that a class is a service component in the Spring application context. + +- The `@Component` annotation is a generic stereotype annotation used to indicate that a class is a Spring component. Components annotated with @Component are candidates for auto-detection when using Spring's component scanning feature. + +- The `@Autowired` annotation is used to automatically inject dependencies into Spring-managed beans. When Spring encounters a bean annotated with @Autowired, it looks for other beans in the application context that match the type of the dependency and injects it. + +- The `@Slf4j` annotation is not a standard Spring annotation but rather a Lombok annotation used for logging. + ::: + +## Step 8: Create controller + +- A controller class in a Spring Boot application is responsible for handling incoming HTTP requests and returning appropriate HTTP responses. + +- It serves as an entry point for processing client requests and often delegates the actual business logic to service classes. + +- A controller class is typically annotated with @RestController or @Controller. + Inside the controller class, you define methods that handle specific HTTP requests. These methods are annotated with `@RequestMapping`, `@GetMapping`, `@PostMapping`, `@PutMapping`, `@DeleteMapping`, or other similar annotations to specify the HTTP method and the URL path that the method should respond to. + +- Each method in the controller class represents a particular endpoint of the REST API. + +- Controller classes often rely on service classes to perform business logic. Dependencies on these service classes are typically injected using the @Autowired annotation or constructor injection. + +- Controller methods return the response to the client. This can be done by returning a ResponseEntity object to have more control over the response status code, headers, and body. + +```java +@RestController +@RequestMapping("/users") +public class UserController { + + @Autowired + public UserService userService; + + @PostMapping("/new") + public ResponseEntity> registerUser(@Valid @RequestBody UserDetailsRequestDto userDetailsRequestDto) throws UserAlreadyExistsException, UserServiceLogicException { + return userService.registerUser(userDetailsRequestDto); + } + + @GetMapping("/get/all") + public ResponseEntity> getAllUsers() throws UserServiceLogicException { + return userService.getAllUsers(); + } + + @PutMapping("/update/{id}") + public ResponseEntity> updateUser(@Valid @RequestBody UserDetailsRequestDto userDetailsRequestDto, @PathVariable int id) + throws UserNotFoundException, UserServiceLogicException { + return userService.updateUser(userDetailsRequestDto, id); + } + + @DeleteMapping("/delete/{id}") + public ResponseEntity> deleteUser(@PathVariable int id) + throws UserNotFoundException, UserServiceLogicException { + return userService.deleteUser(id); + } + +} +``` + +:::note + +- The `@PathVariable` annotation is used to extract values from the URI template of the incoming request. E.g., updateUser method. + +- The `@RequestParam` annotation is used to extract query parameters from the URL of the incoming request. + +- The `@RequestBody` annotation is used to extract the request body of the incoming HTTP request. It binds the body of the request to a method parameter in a controller method, typically for POST, PUT, and PATCH requests. E.g., registerUser method. + ::: + +## Step 9: Create Exception Handler class + +- Exception handlers in Spring Boot applications are used to handle exceptions thrown during the processing of HTTP requests. + +- They allow you to centralize error handling logic and provide custom responses to clients when errors occur. + +- `@RestControllerAdvice` annotation is used to indicate that the class contains advice that applies to all controllers. This advice will be applied globally to handle exceptions thrown from any controller in the application. + +- To create an exception handler, you annotate a method within a controller class with @ExceptionHandler and specify the type(s) of exceptions it can handle. + +```java +// UserServiceExceptionHandler.java + +@RestControllerAdvice +public class UserServiceExceptionHandler { + + @ExceptionHandler(value = UserNotFoundException.class) + public ResponseEntity> UserNotFoundExceptionHandler(UserNotFoundException exception) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ApiResponseDto<>(ApiResponseStatus.FAIL.name(), exception.getMessage())); + } + + @ExceptionHandler(value = UserAlreadyExistsException.class) + public ResponseEntity> UserAlreadyExistsExceptionHandler(UserAlreadyExistsException exception) { + return ResponseEntity.status(HttpStatus.CONFLICT).body(new ApiResponseDto<>(ApiResponseStatus.FAIL.name(), exception.getMessage())); + } + + @ExceptionHandler(value = UserServiceLogicException.class) + public ResponseEntity> UserServiceLogicExceptionHandler(UserServiceLogicException exception) { + return ResponseEntity.badRequest().body(new ApiResponseDto<>(ApiResponseStatus.FAIL.name(), exception.getMessage())); + } + + @ExceptionHandler(value = MethodArgumentNotValidException.class) + public ResponseEntity> MethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException exception) { + + List errorMessage = new ArrayList<>(); + + exception.getBindingResult().getFieldErrors().forEach(error -> { + errorMessage.add(error.getDefaultMessage()); + }); + return ResponseEntity.badRequest().body(new ApiResponseDto<>(ApiResponseStatus.FAIL.name(), errorMessage.toString())); + } + +} +``` + +## Step 10: Run your application and test with postman/frontend😊. + +Register user failed: User details invalid! + +![img-03](./images/image03.png) + +Register user successful + +![img-04](./images/image04.png) + +Retrieve all users + +![img-05](./images/image05.png) + +Update the details of John + +![img-06](./images/image06.png) + +Delete user john + +![img-07](./images/image07.png) + +Hey guys, that’s it. We have successfully developed rest crud API for a user management system. diff --git a/blog/sed-normalize-md-file-with-regex.md b/blog/sed-normalize-md-file-with-regex.md index 4524cdabd..65cce2d6e 100644 --- a/blog/sed-normalize-md-file-with-regex.md +++ b/blog/sed-normalize-md-file-with-regex.md @@ -1,6 +1,6 @@ --- title: "Sed: Normalize markdown file with Regex" -authors: [ ajay-dhangar ] +authors: [ajay-dhangar] tags: [sed, regex, web clipper] date: 2024-03-15 14:37:46 description: How to normalize markdown file with Regex diff --git a/docs/javascript/data-types/primitive-types/number.md b/docs/javascript/data-types/primitive-types/number.md index 2021e382d..ed5bda720 100644 --- a/docs/javascript/data-types/primitive-types/number.md +++ b/docs/javascript/data-types/primitive-types/number.md @@ -72,8 +72,8 @@ JavaScript supports scientific notation for representing very large or very smal **Example:** ```javascript title="app.js" -let largeNumber = 5e6; // 5 million, equivalent to 5 * 10^6 -let smallNumber = 5e-6; // 0.000005, equivalent to 5 * 10^-6 +let largeNumber = 5e6; // 5 million, equivalent to 5 * 10^6 +let smallNumber = 5e-6; // 0.000005, equivalent to 5 * 10^-6 console.log(largeNumber); // Outputs: 5000000 console.log(smallNumber); // Outputs: 0.000005 @@ -223,7 +223,7 @@ The `isNaN()` function checks if a value is `NaN` (Not-a-Number). **Example:** ```javascript title="app.js" -console.log(isNaN(123)); // Outputs: false +console.log(isNaN(123)); // Outputs: false console.log(isNaN("abc")); // Outputs: true ``` @@ -234,7 +234,7 @@ The `isFinite()` function checks if a value is a finite number. **Example:** ```javascript title="app.js" -console.log(isFinite(42)); // Outputs: true +console.log(isFinite(42)); // Outputs: true console.log(isFinite(Infinity)); // Outputs: false ``` @@ -341,4 +341,4 @@ console.log(result); // Output: 8 ## Conclusion -Numbers are an essential part of JavaScript programming, used for calculations, data manipulation, and various operations. In this tutorial, you learned about the `number` data type in JavaScript, different types of numbers, special numeric values, number precision, number methods, and arithmetic operations with numbers. Understanding numbers in JavaScript will help you work with numeric data effectively and efficiently in your JavaScript applications. \ No newline at end of file +Numbers are an essential part of JavaScript programming, used for calculations, data manipulation, and various operations. In this tutorial, you learned about the `number` data type in JavaScript, different types of numbers, special numeric values, number precision, number methods, and arithmetic operations with numbers. Understanding numbers in JavaScript will help you work with numeric data effectively and efficiently in your JavaScript applications. From afabf856922a180d756773ecf975c0c04c9f37bb Mon Sep 17 00:00:00 2001 From: Ajay-Dhangar Date: Sat, 24 Aug 2024 05:34:31 +0530 Subject: [PATCH 3/6] added content for Numbers in JavaScript --- ...lyonnogo-oblaka-YAndeks.Disk-v-Dolphin.png | Bin 20819 -> 0 bytes .../GUI-YD-tools-dlya-sredy-KDE.png | Bin 35215 -> 0 bytes ...neddzherom-vvod-adresa-i-avtorizatsiya.png | Bin 76212 -> 0 bytes ...nogo-menyu-dlya-YAndeks.Disk-v-Dolphin.png | Bin 40449 -> 0 bytes blog/2024-03-15/prompt-engineering-guide.md | 35 -- .../images/image01.png | Bin 15534 -> 0 bytes .../images/image02.png | Bin 19068 -> 0 bytes .../images/image03.png | Bin 16884 -> 0 bytes .../images/image04.png | Bin 15912 -> 0 bytes .../images/image05.png | Bin 19390 -> 0 bytes .../images/image06.png | Bin 15216 -> 0 bytes .../images/image07.png | Bin 16064 -> 0 bytes .../index.md | 575 ------------------ blog/from-ftp-client-to-github-action.md | 2 +- blog/sed-normalize-md-file-with-regex.md | 2 +- 15 files changed, 2 insertions(+), 612 deletions(-) delete mode 100644 blog/2024-03-15/Dobavlenie-yarlyka-udalyonnogo-oblaka-YAndeks.Disk-v-Dolphin.png delete mode 100644 blog/2024-03-15/GUI-YD-tools-dlya-sredy-KDE.png delete mode 100644 blog/2024-03-15/Integratsiya-YAndeks.Disk-s-fajlovym-meneddzherom-vvod-adresa-i-avtorizatsiya.png delete mode 100644 blog/2024-03-15/Punkty-kontekstnogo-menyu-dlya-YAndeks.Disk-v-Dolphin.png delete mode 100644 blog/2024-03-15/prompt-engineering-guide.md delete mode 100644 blog/Building RESTful CRUD API in springboot/images/image01.png delete mode 100644 blog/Building RESTful CRUD API in springboot/images/image02.png delete mode 100644 blog/Building RESTful CRUD API in springboot/images/image03.png delete mode 100644 blog/Building RESTful CRUD API in springboot/images/image04.png delete mode 100644 blog/Building RESTful CRUD API in springboot/images/image05.png delete mode 100644 blog/Building RESTful CRUD API in springboot/images/image06.png delete mode 100644 blog/Building RESTful CRUD API in springboot/images/image07.png delete mode 100644 blog/Building RESTful CRUD API in springboot/index.md diff --git a/blog/2024-03-15/Dobavlenie-yarlyka-udalyonnogo-oblaka-YAndeks.Disk-v-Dolphin.png b/blog/2024-03-15/Dobavlenie-yarlyka-udalyonnogo-oblaka-YAndeks.Disk-v-Dolphin.png deleted file mode 100644 index 83e470dc7011fb23467262d64fe640cbfca0619a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20819 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 diff --git a/blog/2024-03-15/GUI-YD-tools-dlya-sredy-KDE.png b/blog/2024-03-15/GUI-YD-tools-dlya-sredy-KDE.png deleted file mode 100644 index 8fea696b3b389299757e4a7f53831691ccca70a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35215 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�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 diff --git a/blog/2024-03-15/Punkty-kontekstnogo-menyu-dlya-YAndeks.Disk-v-Dolphin.png b/blog/2024-03-15/Punkty-kontekstnogo-menyu-dlya-YAndeks.Disk-v-Dolphin.png deleted file mode 100644 index 1a7bd9dd16deba3d92f00f6d20111c6efebb487a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40449 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 KX;X#tO85sh__*o- diff --git a/blog/2024-03-15/prompt-engineering-guide.md b/blog/2024-03-15/prompt-engineering-guide.md deleted file mode 100644 index bd25488ab..000000000 --- a/blog/2024-03-15/prompt-engineering-guide.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Prompt Engineering Guide -authors: [ajay-dhangar] -tags: [Prompt Engineering Guide, Engineering Guide] -date: 2020-12-21 15:34:11 ---- - -Prompt Engineering is a process of creating a prompt that is used to guide the user through a series of steps to achieve a specific goal. It is a powerful tool that can help users complete complex tasks with ease and efficiency. In this guide, we will walk you through the process of creating an effective prompt that will help you achieve your desired outcome. - - - -## Step 1: Define the Goal - -The first step in creating an effective prompt is to define the goal you want to achieve. This could be anything from completing a task, learning a new skill, or solving a problem. By clearly defining the goal, you can create a prompt that guides the user towards that goal. - -## Step 2: Identify the Steps - -Once you have defined the goal, the next step is to identify the steps required to achieve that goal. Break down the goal into smaller, manageable steps that the user can follow to reach the desired outcome. This will help the user understand what they need to do and how to do it. - - -## Step 3: Design the Prompt - -With the goal and steps identified, it's time to design the prompt. The prompt should be clear, concise, and easy to follow. Use simple language and provide clear instructions to guide the user through each step. You can use visual cues, such as arrows or icons, to help the user navigate the prompt. - -## Step 4: Test the Prompt - -Before deploying the prompt, it's essential to test it to ensure that it works as intended. Test the prompt with a small group of users to gather feedback and identify any issues or areas for improvement. Make any necessary adjustments based on the feedback received. - -## Step 5: Deploy the Prompt - -Once you have tested the prompt and made any necessary adjustments, it's time to deploy it. Make the prompt available to users and monitor its performance. Collect data on how users interact with the prompt and use this information to make further improvements. - -## Conclusion - -Creating an effective prompt is a valuable skill that can help you guide users through complex tasks and achieve your desired outcomes. By following these steps, you can create a prompt that is clear, concise, and easy to follow, helping users complete tasks with ease and efficiency. Happy prompting! \ No newline at end of file diff --git a/blog/Building RESTful CRUD API in springboot/images/image01.png b/blog/Building RESTful CRUD API in springboot/images/image01.png deleted file mode 100644 index 7f0770caf1d8cd0cfebf44ff92602e739861fde8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15534 zcmY+r1C(Yl(=Ph9ZQHhOPrG~C*0k+u+qP}Hr)^Bzwr%6R^ZhvI+^m(I+O?lmNu`p? z%1%W^MpCkr9{|vh5LHrF;?{%(007YcG9MTq1qASqLp;I<04PC#cQ_5&Qcsvs&g(kLZ{2g!Xk&mR8iuOjN(!`W@=m z=hEjl|4jG@c=+=q4#b!T0Rk7nfIwY8W52QI!LO!!*$=J~VC3iE=*HT^SN_GlqCe+oATNI3h}A>hV&eFWzfE}@+Iw8eAO}M zw+!rkf_Q8?%-iv60j2uh_rWis=A9|OZoiIi z;CI_I*Co;$(<9T9-DJO(&j9v>;AG`rw0$@`Twm)_pNCY zf%$=46sQvv|4R=0S>&NKuSK5bf*7T(GX>r=pLuY-2XOJX#hWXRu{%ejJo}vu#!JXI zDPfd^q_=o}7@~@-YnT!9=?6)yDN7R4J6srbb!5NW(v|0T*FaMwSQ`2dgY`q3qq5VDQ6fC{ zxHMGWp|Tz!lLB&ievZ{|_iT2M28NmrJc*qw&keOL2}&Pzwxwgt#f-?lQ|mE}~7&Pl6i@u&JKiCa-i#N;(d=n~#F(x>1**j>Iy}RIO;Ryv>G2dUr+e;8^2r-=61!GrX(nn}ckmZD<(K zz9h3E>K;7j<(P+_wQ8ZH2z%DevFvTk#nu{l zm0Xse7`_|v)QJ&&AJHg*mGPSQ6~w-0E5sZuKS`9IqoE|6cRPR}+f&dv7QIBFL1hC% zhGa$dMB6>r@)b&beh0FtBRDC0Bj*F0SJvRFUNdA{Qss9%@Pw`3rS(?V6SkkL{@~`I z5=8Oft2n=gFNJQw-&~tLZxy|3E!8?XG@<@u!+WTRX6U3$Z!tGr?VN~sSA`CO%w1iv;=QkjWZ$@UowQT~5h@UsE-u&Iz)2or0 zfuQ|>WBse+msI>YB91BgtuVKHRUN*g+)A7N; z&_JRub4_+P`SA%5xLnOE@aw*Jw&anC3#m4LBskh?u&Z5&`#yZR3#i!u`Yy{cC4F_& z-TKqY0uulMIzz!_d0@=IJNJMVD%O%ygD?`Z>C`2OE>Qc-vr7yz<@dxY;7GGI1$E-w>yAKd_5q({C^tQIU8xq{D>zR`&qf5FoK@jPD4 z#6-FzJ{0}c#!sh}^vBZ34A7Z1n24By0+0XKeO&hW`*?<#?fzH|y*H4!pF-`wh>L9m zhel@6D&amF_a}wpz2N&B@BiOU?H}5SolX_WoUs9=_~C9H#|8Za=h-VtqCt!wfv49o z>K=^Gq;oLQ&^UESNZkZugj|*(fYl7`8DJR8)UGkk_Opwc4Wl(J1k$*5{%QLlzOo+a zzfBAdb_qe}$-SJE!=(`NgnrnX8hVbrwn(j1AR1g`xb^?n3+e~5am4N~d@f|kUnegTy8gG1w~e~DvQ2rDKlPhf=LL%UnK!*OGEvzHaR>zkeKaQ zfkNBVUuiE9f2NMX$dr$b%bjo${6E~kM(O7hN@^d~3Y~srxm09FQ|IhAk%nPjOY0Br zh=}b3yCrB;r4cr(cL+XJDX2Ek1WUR<-25ThdJ;5huEsKa?4i<>%_JpO*tIk{AOSp9 zG`?I$kD$Hc?Jy7~V*dR%f_?MEmfM+k@(uE6%au2uNGJ+yDl=fWPb4Qp^rz(ML&d^V ze6woZmd}mV3=9gcbePX(IvJ*T?&v&}XW}gIsuXS-oPZ6Z>aGk7_n8MZPXI>x;eIOC z@@dlH^VND%B4jnp$N$|`W+k%ag={o9wF z#*1Z|z$|i?dT~M1BP{?#_et1jNgvco@a);#7@8O))&8a4_8^x!tJ~r@n05dJB~(7` zk>j(@%8=b?tqs!8n30D`cF%LGFeUIVTcw}0Vb_~~)u+!Jm30;)ei91^eiW!TUX6hL z;b!)iS8rlwYH1-{F${+^9Qe?~nP|DCWUzoMkTA7;_ARbh=1~Z*>1n!>PtD|sqeRR$ zlhUq$1Balh#h!(@d$b+@#v7X)@;fx87-jp)?}FECl$BMR z?v_OkNsdOaZ{^{{WrefeTzsQvSXiF(S>4m$9a-U9j*YBaf>tlmCd%Ba1!%qIi?>&< z@djED@Dwm&I-N(-q;T9mFUi-51Ds8_Ylrb=3UEi+7#>z}N@;68B53dRs6-CYl9v($ zkGX7=R9jGEM-@9J8x9WyxkPm*{&o2GhQ;y@!a?>U@I|VhpF_`bIf&kHia1| z(KP&>6q=+S&4yB+lE!{EDY}Dd=}~2n-TzYHw@FuRcu8k}D%6l3h?iw0x6}ksKbP%Z z?O95EY(@SlnRn^<`?Zw_i@no9L5ob-8n&n0B7dg2DIRR2%*OCpmbGmWSy$V+4KgW> zYqv)>A*NkGc5F5>z{elH6_Q%yFIeJwxPg8IHw)ex3-zdH81Mrm;)H zBzXG)Yl{^fFgIx7K)|TRN=8ob93c4$ikXD?d5>Y&R}=;Rr4qVdL2bw5XCJ6w_9v`1 za0sOSK4U8u^cDp(;MQlHJpa6|6)V+n5*T$U0Vrnt6Usht>=&a2HpxUi#iI$hUvaj8 ziuVGC1X0z7${FwTS|k@b`N{f9sx|2DV9!61j>aay&!4J-edxf~#Qx-(wzy!yC(M>p z2mG3buT-Jz#ZlMQ9#?vP!Kj*zylEPqaIbV01dnj}5Wj zxrzNmT7`QShb96O0CPN)n49n!3sI4W#7Yw#FP7Bu|$lc!u=wP(?hq!6E|nvTrlM<$4_F}0hVB1{1#m#Y|7 zyxa*>_$<5x^Nkihb7w3)z@{qIaz>1aDHWZabWxdY70qg##FL^+OYgkJ@9DdvBXx#! zrx@DsZFbW%8LRH3Cfpv0eWDdI7s8^1qvVYnP@uHre_NS%s#Bx?&3|z}DT%rTQCc@I zu2k}dBBpKcLU`@H6;Cd3P;5X}W37K5AkDeF7B2H;^Npn#QbLUHi&AL|o;hHnS!>7n zn|Xc0HZ8A%pe;`H{odQtUP^G*BeK&q9h))g=gb|K$T_`QVG;`FJ=2*zu(^}&0rxS1 zrYr$Xn`vp=5CW88#_iPxZOYWmEYJl*j&AL1jpVFkCQjXctI& zXE^M^CD%|VX?dO8CmM+c#?pP8Sv+e^x|Qny{jmwBZ15qWP4eJ<9zTrPo#9|xi=cYM zV`%SUsB_w-BO-1|>Q8-lVmT*J1qts@q(0kCo5r~?U{Uc5;&+>q^{Dg@-}Hq?nyWMS z82?{|Ioy+&6)G7vcD{hENKRE%Ui17RNbnWhxsI@ed`iXk{zBQCQ)b2Z4!olG!e z2q5091_t(iXEfWcNaJ1pNX;;mvj!8e@^R!|#P^cdh|3-auE&ZOniwa`+B%wuA{0%y zsFc2|SI-~yCw84BQ=1|5VU|06rUWp46?oAnIN-GRSq`@!SG?YFv0f_kgFB;_gvajS zbJ-*f%m#*IxQLUoq@6HDf>Q7U?T3WcT zI?0{CG`-~?G9b%XNyy&b9k&#bi}NE)FBav%k-qTb?z2udjlXj_sVFWJwnA6wR5t&; z?1KOk-OqHgWK@{i+Eb*(#DZ|M^OYhmk>W?SLGnvdp44E)&tZ@`6frdc`n2^_!QWk) zt6rb5pnrp1^rZLv@Q(QrnWwyqXZJ?k39@QKYdb!BQo2)``KIOLKEchSn!=cH<~YP{ zV!%K~i9)(rfc!<)kcPp<_PF-?XFFp>BHx0{T9a^$iy_~IRu<1ushAcQ@05t{fVy*L z;;ty{;`#IFz?aIfW|1gZL^g(C53(>>+QqSfC}Wo0fy;_z=3kMI_H^!BtO@PHsCDH69uH>Ce(#pLvwK313;Cz_$=w3!Dd> z8)KsZA&!tgC|}o!!;m)1in5^l&B`d8NJQ4TK2}V<+`by!BXX)AdVl}7t7?;+`@6@G zg_DL+w4X`b$jfksVCmUh%3E486#8HZ^BJx@3Y9Q>GiSf`N`a()JN+!)ok*HO{vDgH zZ}A*cJ!Tetx>@hasASDLR+Z+80Ce_=SZFggGe%uyrvW8P`rp@%*A~=*6=p_3KH7wh zxK3Q&fHDz|7n0-7Len4bkn^5DE?Y8?Fcbw^N}Nqvd_|3ab1}jP-djFE^C|Mel(Ftl zOP=<3Wy6Nk37@IycAc?tpTljfGXFgOF~w_+M^jn4aFll%SZ!>Mf>Z#3*B@GK*%6ZK zKsrgJHyh2sAN4Mx+fwPX002`tsz`c0H<)(b%EsmfOQVB4!g)~E)q5Q|zG4ri#PU%! z+)}@7ZZ7IzbQFW2LZKL{Cl^TgA*f7)x1bJ-#TtJv`ZLGxh=I5E{!V^Nj{CPgMlz-3 zJ^2GNFRQC&C;cvC9Vk0MB{bQ_`%RBYE~nbop`c7$~ieRQ7b58Jv8BK@3^|%GZ^&*_by=Vk^B4= zwus-|+D%+&ek?^V;=){oB^|wB+&pgz*MZ^%Y$$t-uo^FRJ2+BU@a6nWK8Qg7(n3Or zT&-*zNLo(luRDf1+|XKo(Aq62{1sL7DCNSsv{qoCBOi@&bL#^%=M&w?Sb=23K5^OW zbY=AJ_Avo6!)=}BXW0M?o7((665^sLtrYYfLCJQMKzS=J1aUrQ9|Z{6 z#AK=6nf>)WDC!&hg8~mPb~tC1#Ue;;q~8?-qPNZlGiCt+_x&M4T>|+6n0Dn0zkUg# zrf{(WXC&hfMTm{>)g2(@jdS_t->c6Hkq%)3$yN*cHV_<~hDz39(6X{;86xR#po_x#BtLGsgN z)lsrkbsLa1tlG^WF*HwXz{!i_-{oR(a zv@iO}`)pJUGB98bPPG>kfEl6zD3F6JFtDg0e2wlI&8ezZv^X^ouE*{xQUTX#$gX^l z=)t6jY$yZE7TRUhImb9r&prHAS!SgI?Xsq0TQogY_dzH9@YmI)vwMTA8-6^|4-)?8 zG==dT8lbTip#eXv@=~96jsebmCKbHpc5uD-0;Omf|1-;wAYX{Jf)R%& z+_k0cq`vXQ74>6pX;g37pXy7~mfAy{Zf8VIpqyW;vQiJf?2vRBqkVOIo{aXeRuP)~QxDEcTQ zO99NkUb=>=i|tnSH`5R^%@h({44+zhT4dz=chGe9j-`C;8yJ;}T>TDe{BnnDOhIqR zOGB~6IGe3p>4zr_`k*FhG_N5($6GOANHFy|Wn7MmQlmwhwp`-Y;ADY``Z>Xiq6&M2 zzmmrTz2Oo*qJ@zS)AaYE$MCNAm%y*3))Bxc5<~K3L$eD8h4G64^I>?czyDG-a3JCa z3jQAb48I#7@F;W5{%KjB65;V?aQPFDh5GH8zL2qEO@)dN>HzoCWkfD%(d_)JB3`BZ z561;l;qY5+IEFqD@k_SKwM0@TY3Grw84a;8@9{F4@AS_tHgW&5`xn2nV|t7 zA2#jgq!OYwHX`7vI<5W%tYyjD>Uk#dzWm_&DMAP$FJ}|dTH~lB{Q}>P%L!G0Sb##| zgZXpvgiM`pd|oEar;0GY0YP`7h6YPRG1!mgRF5CzqHHia6vi9#s7m(Oprrhwr_yN? z6Wv4vsF6|-U9N^Q32`xdZ~4|W|7@rhe~c{!i7rsbAs0fu&oE04R&Av|Qq0xZao~oo z2Y(|~``bBUf^S{iiWe-CU*3#?cZygnu!m4qt_dNbU^?okMT*JAtlqlUDxy?_B`0Hv zl^=`qRax7$(>K$AWVrzd@1c71iP}8?wM!Q$vNv#OdsrmA4O=bcq}k3IQr%~Nv8cj1 z({+$o__i6jjevxm?zB@8Xr4@5VWToWEtPaanbYr{C%z~sXBeeS-lfm_Q+frys|WFe zGY>Xgl9?0G?QukcchWFr_`89@PFm#|lt*>hXk{OKWnDi(i8)@Kvp{W6lJ`E)i>d$P zHn-D`h&_n^MAcJU$8r05pC8_S``}bs;DJ`W&|gML)+-$QrJf6qB9v*7DOeX4T!yI$ zwk?Y20Mj}Mqfc=-vf2H}%GJ>n=%Fq>cRWa#7g-O)X+$x4LF8N@RxaN%@kHwATau%T zFv!jNA;nU;y=CSK)|WO%7A|#HY-<8$Ez-fKepGOSeNDeg9WMv+HNg(M?r3qFAS8Xg z?Jy_Vmr{#DAAErcahKo?7Jp8_Hr!cEeB~nKgLs@hRlGP%F@i+ z@(#1ki?S|23|KsT(Y3z$TMIQ;{>iP37n~>KIAB8~8%t%a`=<|xWw&8qI|4|R#c%@U zeFdKhfNi6M5gLN!VuEqlDGpCtD=jxjmZ^oo!uIMq8?trrDLt~F2{3GQ&Dg;<8pMDp z;P(l3rJ^$m3fPjp2|rq94PV{(Nh0F|a(p#NhAe)4z1}m;{nlC2E{fE^<5hJC9#Ng8 zzGMYqkA7aYePG$xhwK~6hlF@W<9T)%(rDq-}iicelVd0Ck-QOYR&1BYRmgyGlE!izT>u_KOj6=4N9gIvQ7{<>L(y**m{r( zjL>pE=is@?A5*NJjo6d5@JI<)&@dOsOLrJ>K}vXHE%nvKcI^FBN8h&N@uge`et8+lx-$` zi);B5^la&Ky)AoJYPMQ*{0|v_as4?-llYLRq(gDiR zvE3;-PTzNFmn0goVj*rslX(tUcO4rY9o<6y8NAH?xI#JZ9r+YW@m6Mnh?$*D4(3mi zZqyB?y4uy`qoNSd-%W*+sifNsAV&@C<}#2fiFC^7}^mnw;V}J*+>Ycq#{7>Q+T8ZJ?K!wvi7P4{G~9tk;v4^UJH? zltA~+7m@wb1%twqF$t2sYP#gp9E9HF@un~^A8FZSR0 z2}M<9JKT9SNRiPGmipUlY|I=bN^};O1u}-2$@J-o%O^Hu{z7-_P+|jnRP()K^6wTObh;li~1GBt)XolkazCE==>Okrjt32}c+%!na zrn^gi){~eh<0x3{NfPc=avcR9WsZrfPePGDF*=?}bwQ|RmiVQzuy9_YQ$s4azmPBF}CKD{;zv-VhB z{f$d8hkMrVh%=_#ZG>Vu1wOq9{33XjS(Xq!1@4xU`_dEFVdtIzyOz`nmyB%}xs>#c zigx{NAF$ZuBd2F2xqh+Odev?Z)rdsAdNVJN6yUhBYI~K@HvFA9YFsGTc0UVt6pZt} zoPo}(PeR?tDO9M#^7O-##X&!Bk%j;#ndqzT@omk?R?4lf}mm9#! zV7q@74!UjV^C{Aw4*SZCKt%5;jBz%%5H?pC->^U?;Q7=42J4k01b$gkM-BdRaLDZn z<_4hiKjCi4!9-r9>;AmxAXN-aTNz?h0h59!BS_$|k|ksSeg*I_%Q5mPdfmDcoV;VT%JW436>6sZ05bF>J|E?uH;6o;gA ztQ8?UVaop=)6Bpay%0PBITH7Q6E}sxH?tr_h0s(5Lo>|sDva-Rl9vraz?-Vm@&U#B z{V;&HPgb|gBw(7T(-49i7vs3_Fhk^8F?cFjM{9PyPQA}Wr;%jj&$-AvDw0JE;m=0? zr=$yp!_MZLZZmq3do?=gm?3GcNrWUV{JNIK+Pf+5<0PT%A378XyNshB?k3ZGifi|DP%%WCXbnVYb(mZIJ3m>-V5KHi9|n=PoUHZ^=*_iD zGQINKll~DztoNlTbIEWsG5-ZIHV`B(%FL{d7zs6z92=a4q4BsO{`qaR%6Hl}9IB7A zzFF@A!nxaTg8R|t*gx}rkHbcwp_Vn_hFmChZ+tJ|Y=1AO5P%Zs{-bIw=9S9?W>y8v zCVB$ZMH)#K+C!L{@?er=C$;j=IJCjmno$>Y9qAvkh;(Zw9K?oG19*!-!sf)SKP|7$ z_oQpQPPi&T5eO5+w5(90X#=i>G2iFBB#h3Be;jdI<+&ulm~Sl+z_k!GTMzQW_lMrf%dLE9<9Bs}v8^bxYJbVrl<0fBK9V?gmn?aidH+Niv|y&xU3 zT=}YgT6%7fzkK`J{twy~s0f2V$DEmHzC{}ZoplF-S9hj#PERl)95meki@?IbhO2Su z`l8E^(B_<{zD703D9iJsGe*Fn;?OrMcSrf~9vyj_(I<9T%~ z1GEpjFROltAc;;$>HScuIXcf*ksH8jQK-(9%k_8K4l)^Uc$%yP`Fc*Zv4!wXPJ^+z zvHD^gvy+8(IBzX{q)Fg4KrejUUN_&n@!A*@^?A!jbGx#f{X5>G5dQ@0aIpi$KCLy` z;5H^8rLPu}B-={5YoUNfYEM^W-yiT{6=l=jHx7TIUrc~M3RzktgP#;IeNQi0Dy38_ z$ZC$qes6wSkq~~7PHPRX^`}`Qx@pc3F`l<_hE{xxc+JGGCU6ZEs!W!dCvdlEZ;napBj*F3Nlu2E6VC@S{O?wv}X00z=(RR#N`=Y{oIBwViNE8<^CDkM&o6-p+3LkA; zjo)pC-LhS^P&Ajo8Y420KqXFH%7p@a69ewp*9fo1G^v z45>>*2qmTn>13byiy*#AecD^Iw=!i-CR|0Qd+<1B8@qpJqf_U}+jy2A6@;Y&dhJ4; zwQLc2y21&xR}e-!&nB{!{WiUPdQSlhSX~J?<;EoD^00>_a7$)#FYN~ANgfnrh>m;0 ztTrJjB7@jO(h^bP8_uq#7oQ@85CX(zM*5<_koG)>^Ki+kTk9<JZuCp$(AwrctPcm)p z1>~P21u{(W)YI)))S8URalN#;_fM0%H7$Hc!;KlvAlg-0Z(Fo}ZRI{NtBXdL4O)&U zP%X~_PiQ7VRW^bqE0|D=e+yWsb44FFGG`W)zLU?W3}aQjp(Chk{Ce-U*d^!R@_>}qVq=oK{B+TmMGLp{tjP~x1P3J59qnSS2pi+ zepLU3^(Cvn;A#JOt39el)OhRY#-KjzL0us3WWh45AbWFOZ!<(l`s_s)8x=b(fSWZ{ zG0lVyxa@NDPVhv#8pxrJHIXhAh6zx+(MU@aEw0m@m;dcmIi;#gUg9mk=RxgmBc=qe z>W0<_0Dw#0b~R{Y!e*E8iG%C3y)Ji19uTJ zf2S_;k(%}`SzQqaLeT@wSx?6MqJvmTgy=m3@9=}EUIRa#Qb9{~3bpdF3O!yt+a9jt zL2PqJCcG*?ex}E%fl#vu>V5r$zgqAcL)T3AF*$-|WQFaie(nq*wFrSd*i?4YTEDr( zWnm8`#ftRW3;tV*O+=S0NFeOV8=TJ%mgM;LiA#uA0wFt$BK6_)vh5J(|5^CH7le;6 z*E&5sWo1UYgqJpU9=`^GAKZ8y#gHn?2eM3&ke#la6zQ6Z?2`9D_W3bz5j(pg1_Ew3|Smo*|B71$5&u@c_qld8o;thO^{>4G?c??(q?gIh)BTWCj`RKY}#I&JXUQF28StP zG#G2E!78ViPg1ONdo_a8Qj+5(*^X}c;i-Njd8{}9=d$R96XW0ip4y)dVt51#=gcW? zmOn&NP8NHgG9W8CCkZz0rg~kx&sRmD`~X4GY#JpUi(r^D^|IeRZDO$r<8PQBw1yxX z_9i8E{0{5ZN&1qNGKPcZ^m2zKh%9LxJ;bA>L;Ko9CtgiHu4t+nFoi~b{Pooib7x3dq+D*f ztz1t=%xI^b57KAfxBg9!WNv?@yEAo5lO0ZgBI%)rz8gd3&JPl4vf;Y{2JNtr$6;YN zQ|R4`gU+Gwn+~x~X_)Qi@QDF)LO;_&ephbbF9jA`%Kg4Vr2-w`V8R?jHK2b%(d`6gbVu*k zI5r%#XB%tVtu$>_CH#)e0OfiD!2Dfo>0mSPSt!xfVR%o%z=YNz+fi|^={#POy6lmf zTd!>{3Xp(Hxsiz8T^W+6d73NPkm0xb^B4S8V4nJ~%uAQ^Gq@ z^b~k|lLYw$!VK34ov;U_^YVFyilX1mq13=6zX1%f|2|wMPy0;@Hkxf4&JZxa{M%E> zFn@>h&me0pD%zLM5k=L`jNYnbE#}|giXD%z3R@(A7z9VPVd z2pm>CV1rPszx-6Ww)64uAp)^eo)Q9|VYEB%MA!{%TOzLYI!f^$N{ofTVqeOXA}8k$ zO2AEaCr-Dnp9I3kQ)H2_<{Y9^@TyExbByo@4>XJZEzm8vViR>0IAu_gKtycii@na| zlKZ8<<8R0wOgPDBAMo?c+4KuC4eis}PM?(r`uDYA4LSaCUb-D&TaiIad|9Ugz@Ost zScGcAseztK0SeE;^X)@ABx(W#DoUVEAQ|&9tPDzlP(u+SB%=+D#wMURZ^Gf)DVZ3= zxI%c~QLogljF>^)sF1$;SHNWhCGSDtu;aIV1It4m2i_MgS@101XdQ&TT;|a}%6;Ii z&?G4DJaS|KCO~?0^EVPG0EMMyrSBz^_{X<#)q1z8l0N|DaD!T&0WY>hI&2TDBy5&w zrXpcklrCV2>BnB#KxHBfl~(YC2$9pQ4DTeR_J7{Sm$hAzDj;N1*2})2hLkY+p_Ps- zAwGOb+VzRLn&l>FY6@S|;V;$LlFr2q=OjU%LnAz$NFKwgI$lEws(I6%jL2x@$Gi(f zH&?P=37P>Y#?$jYhC!f=UJgREZPd0%xY9bzuHdyb@~+wN&)iLJSqg#$=3`=+f^byw zCb$+YO(aj+O6}T73=nNN)Gg+s4ab(M+E4j}{L z4o|4eU@U5EpbB0wDAKT2M*?R(iVytDJkxnLN`-FG;t8(sW`ZA*m?Z8&K1G^{T? z@0J#tm2uikpM}sJZ4ak{uDa57-o)s&#h+makeCyQ3=U=nMOFL8YWktrbWzk|4|XDk z=bm+~>&-IQq)2uAT{fUYRP{#?s1$z@=(pDQXWK1PIw&!bDyUG;61bSnLEX|oekc9{ zH2B6w!xIQM8%*l>*KIBI&5!f?fXbW{2Ox+PPP)*|CmgaKqK5CgDwX2u;;UzN}0do$upQK;B&(cSL5F)$Lb z@qM@K8^Na3&&LhR^zS%D%2=8wWtBY8SnKWVx{p?1IrBZtxqIp6hO1cMPfU{6SRD($ ztZlmuaq7&dQ!0A+7VXxMhru7Ub`{ST{i}V3`>a4$cS2M~(3s~xzz~!!y_}>Iuv4V7 z%n9{611x$C*h(>RWp2r67PjB3U$H3SCH<0Y@}SE6!1FHS=};d$Bl$k)M zHZYZ}VF!|E5ZvruQ$W{lsJBz=v*~r2*sGnx-itkSh$~4064p>G)3)_A5n*pY4w&(G zD!=hO@29sTleQ9X8-wZx>^|37tAa3qfXfi16MXz~Ll=1O#-tf)+Uji7Bb)XakG<=n zCjjXxLhSf6vW^!_JCCVQ`}e8izsX7Py{qyVEr>H5Rl;aRxbe8bU#8v<+=E4&fk5&Q zQZqB%O#DS?j>?on)+rp5%sq9r_#$~TXE)Ur&!uZE3ISc}Mj9|CXl-5LsZ{L-t&*SRJapCoSI!+|R zVanSL$;#Ln9M8wy4A24%hOfI7PLi^^-xxg7%wfOpSX*fLA=4^*92O7hQadx;x$1|U zqs!+zFqC5&O66GFc3}OIxZ0~_pFCx61zM=^*swW3#i90Ot#X`bg>9EWgXxb<=>z~y zSE_!=vTS{J=+%x&i}!~^N68?YT5Q^!9mP5!Be6c zi{yPu5leLir=MeWna+qiZRcJ~!UZ_fVm&Y_s;QB z|KMTBbLueqT9^Jh zL|D2|07!VvGkHl)m=LJ^UC<>G*qC6Y?(BVf?T>Z-l_dlD%|UuD4U2FQMPACuzbA-M zio;?b(etLKMEGgH_if@i6z7^Vg`oP`9QQ>zCn=ReT%Ux-V&ZufHvlXU z>yUB$^;PcPz93kIFfrKuvLMtDr)_uCQ;0ojXr%`p4V4Y1g>=^^(nVL0Mh~IQDwm<@ z;N&n%Xnd7-FY$ZjGWu&4WHQT(OpTXk$OquR>QeWI|Lm1`62!RLQ#RsI{{E1vdqC^Jf3JU35R%C4H zvq16??MbUVqIn_{DfC&JsXFHk3T({^@&)TgN`8HAe#dZBK$PSB77OiR0^eR@IZ}7x zs!!^$B>yt?t75~P`0A$uoz4@t>v_I?m1LHcdFOwQ4_jD@=1Gd60ZH$-rGha#5Gq1xB%Kd_M>_YuL z(+sS3oFFpEN;zL4aYNPbG&QosR`!dL3dntR%Ed{$wZB;IGf$3t$+TfaBmt`d2sq5d zosP^dh01Lobp^EFuqdK%@1Epf+3=#+iCx>xjNL=P0WE)^1YQqdcUP`WnLP3rU zioB1yD_5+OlR$#zzvCbIr0`U<$?lQFy|0}+NfRh!H&%X~+ir1hi(JGKCvJ}UcY*$4 z1FumCLU~m!)Epr5QAmvON%@O}2<1&q^hC9qyiI_YelR&e7m=?tzTi`|Er*faXh*~w zflEJ5M7KCFMQ6`~>%N&{UQN6vmr267K=tb^t|SdJ7BzW!p90n-IMa69bj&TmakOaC zGskfGnsVFr(AJ9bxC!R1!cq#WKf`a=jaw!C`M{A3x~khHCnIby!XDXlCVl;#0Z1ge zp$<}m%`iu>w%*C2;)o>3Q2S{eLu!=SMV+mv;CZ)9;mdZ*(TQ2Z8Pqj7e&D=isG8X* zKQ!@YLeE4*P=ET{I!$u((ZAPy==I$G#}dw05vKY*^Sst&`6~DxtJ<;ZHEhU_(Ri;`103=t=Tm^|HuB@G5WK@C98( z(of-kp&OANSEDgp(u~j3k|bW(jl*;{=CV^pKFjr>wpaeOy@>vYPQBxb(}Ryw3JVA{ zxy$`Q#PB@`pIMQdd?cq%morrNiNPE71Mb|&&$1yun@=zP&cq2}BsdlvsvNNm^}$)V zNx9PB&G81(TqLB}1zea)(MtG9VrSSb93v}t|k}>n?b>kZRJN!eb*s8C4=T-+-YmvHxa&u{J|kt?{CPm zbS3NTLie2`!T5pn;Xfw=A0mZzAqz!YwYf+8UCJ$s+f%8Rk7?9KEi@JpT6}{I<6zm< zkg(41_LUmo}xnXNOdUMD3>;IYFN^dlh;&gFV7mJcXCJ9 zbTGzg`8>RexCHDb;0gOjB4$oEzuU3s!G?|QZrWYEyBPQM2ema z$s*E#+=?-pJS*;`hdZ>-#`PoDgVJd((l8^zX)u!Ju7Ba@ye~<_olUbihTb7aA!s!? zOQaw{46G5Bx&uEDA+&T(lQnwpmY&zV0HMa=CGb7>j0KpQk$=@^kKASmQm1itqMs zepVIzY=zABd!Dr6uawQuadWM!k(?}6bd+&5sJ}+;Hp|kabfSUHR&dZ=nuU1fYwX3& z@m!Sa{+3Fkm1|llvA}M01`=L?k?i0$W`0FaTP{jZz8kN{K=FaXFu{(mwq2*iJt>i=lG z|DpB&(bWHg`4{I5Km+~1c*`*G|HA(h_+Lr--}66m{xs9 z_b5wCNVv!V0cnVfD5@)RX~F;j0YUw9v;zb6fB^k-hbToF2#5&_I0u-f1GpDNz>XtB zij0(`fE?}2BLF_q!v51Iv+5Lh^u2csf4Y5^<7bo4(bj(%W9@W!Jzkh>6`x{e!u6iyFsw^d;4&6K``#8_tfB?uv@U{`|AYr zlkiHP_S@ov^CRz4zppplpXev@D}9{M%gnSnuMM+FP~<1{8}~E)>LwrY!C;SH z>I?B>^)s*SrylXxU{mnetKhryM>2|WTkzm}1S)t>Ob2N1paXs{P|gU)%=?L=hD)9*cV=zTJe$KfQz3X zfN{T|cu?8fK8v{80NO&D6xw*03WqOSW^Lb*8^bX6=#HboI0c?Sp{ld9vx6S5(^yE> zHyug6vi~t3Fgc%42h6=7HK5rb0})TT4905+lN_y>P5#S}>U(k9^JK>X9<28I|JH4U zm`7ZoFGjbSW1R=9)4bl|q9U88z`qZiI>N~~;Ej+M5Ck1NuUfzDY7};yITCp zC2#UK@uU1ctPx2GZ?-8#{ftjm z^6;p^|L-;b=ymEU^nt2l4WR-8ktqtI@0nTrU7m(Go7Qq_lHXi2LLFI+p7p}@+iVS% zI`MtMAne%@S_k6 zxcaYQ|FLanm*R2c-^HNLKlFAZMTCi-ZPqF?!>(q~^YGb3X?LIMeOtPqtlT2Z*OqwP z1fez|Pp{M9Rp$%6-bNw+MW_-Du2HM5o~>a+SiC|g+Sh6K{qU3+Z*0;$uY|kxaWQXZ z@BdVpCoxEw$6^t#uk#=^x>?13BTXOx3BJh0h7}Z`I7+tj4xC|Ue$7259|O2y$zo6o z%>&+WljkaYBq2J2`OSoOsd2jEGHU`66Nm?ud|akFGaa{E@;svczQv5q69C2KOtFb0 z<2S_VaqQ>)$Eie5yOBwZ4acM(F|8u4rdu`o-@aqxAnYh$Cux18W ze5cx(we&A6-Ud42RV71KGr8yZ9Z8v&b{u1GbHv`AMx!&?3~>s>y^-Gk;x9Js)U~73DbdduwQZa9EMsQ6qx7P`;8>|ZByLFWTKl5^ zYyIVYsRu+h$sn1WvTU3?knM2%fggrxwC(z0q-cX@h}b;ND6vQ)|C$Hbt6Gsur%y^g zx;Niy9DC1(?SIzn)VZBFVOAXyQNbZUkPOQjk7OJHxLn>Ebs^Hmes-Fu= z5-PBOT2r?-YzJhVtJ4CpV9JZ6DWT24QsPf}iaU1vZ=yS1@L}k?faMCVXjX8b`I0V( zPg-z8_S2{V$^UVJ8>BJ4p*)xau3OG$%{Pu%vTX7kvKaDcw3Gv&`%SVO7Ns=EG4dJY zT=M^f`@bha2F_nYTti!A!HcyN(-NveE7N5lZckd}%X_@3F%uE40rP#)ln zM3ErA1N+3UB9Sr^ZAaJEzbgxBb( zm=>ZOJx$3*sLWNJ{A1yysJm!`Wbdv~qzZu!kH(-|RRI{xD(u?t{ts7qta8%N(*O4EjB{OU&D0#dj$Yo!HSq97TWlZi#!%`l;5bZcTC}D7}Cy#-8K?wqTHyk74$x$D{@#cp0IeGQ@TltZVzlz@(!TTnQX0ue1`~4YDF2Q}KVxL1$9RlV8 zW;kv3#((nM#dqfn_ygpdB>BdgUhnB!mFu@9u~OrgAST}P0)B9ti&xbc_)@0he9DJv z6atV$HQR82O_g%3=V$t}1jrb2UWPVf2EQmmV2cR51q~ z^NY&{_S1LBZ>KxZizGXVQu}Og4&A7-!}|B9t)k4((*@NPo{6x4UsCRVnoqEhQ%17_ z3$?UaiDyIu0Cppsb9&RbbM7Cb%Cdm>v>^Jhu6T%I8L8Y*Xwp9f`RO$z)3yh6ZSaNH z7>ksXcbX-GLk+niJ5dkPrr23%GEq~z;?x@EX=HJ`dhVb@LP8C1W%YVA!5Vw?1C>>$ zp%O9a@g9b3F~-&R=Lj?mh7Ru0J&y;F3s$X*Dzh@f`%Vay>vH|4!w?fgwH3!8NLzc| z0%=*6@e?lSOkK*aCiyq8uTi-c8FfHQ{)v(KbPD&yTfLr0n^#arl3IiEdnV}x zw$4IGj8RAZTB;I0vBQ$7<-5`lK$BP+Pr+NfzH9zI(}_D6Aw6YW-`XD!%TrmjrtY0e zrs?G{?=f3~&uNI9*%|c_~>S8via~;muH=Q2!TrCb37XnscBqO`7ArP<( zJ_xhkFP`YK8ZYvm$1;+1jhoB9W>$->Rda*-mh`Qe2~h=ANKskXe#82O&@6b#O% zUf@?6AzFAZn|vgw^g9e-0qif+XPMJzO8QKMwv1k-qF=c%_$0Jw+tH#z+=ov2cP6>+vH9rW zO>>&?&8x&#cu$E`C_EwWL`U1!^aQ_JA-BXOofi}&q-)FhR!$(NC*zWO(5{R?iOLbD z!R4)={i^0%6xsg3@|oiL0DtA&h@IM@;*K930MB^-gXIi4|JLUFbQ$dgdX;0ZPcvCD zx(1YO?q0a>RT!4x=K8j0M0Z4s};xMv>=oO{l%Qn0qil&a;|50360J6q1yUWBo>cLB+mt@hX0Qf zq%g|j?;z4l43l`?n@XBXniUWA=!AawP>xl?6M^;z=`bGcA|E3* z{)!*PTP3{(<(-s{s%vUvEm*yGbH<3so1IG0_vRkOIikf{Xt+9C+)qm`)XOqx+L5I{ z+pzf@nH(NB4lx}9YCB_WDc7S5A+ry!w0weE1c3%FSoZj-@Rx*Za#qCSo1HrjMbcj# zKqmsXeh@MZGp)ZgC}j7V+SaWY0Lf|!hkkkk%z$+i4&+)bbOil34P~tGjG6dm0@MFp|y09PuNgfgd{wwH}a%HUOZ``cZQei$>jgbU?#SfRUPS9240$NcODRdRX zQy!hM!b80dg7*oy(*1;CA;3WhT*yspCiS-or7gCu7}sB|GB|JG2#%aQ_quDYq`D(K z+thO+39*rd@^2`wiL(CMP%OlV=*3Nkx&yosRR+f4@}-7ztnR7@{(@wANPXwTJbbY| zm0KU83mR!h3D;c8u3KiZ&1oXUKa2+@loK*upqaGJK9 zrs%a>XvPCxO`-@ZVoc#C0+!GeDeJ;IMxDc|VD4s(#@_9uQ=Reuj512}(oY55+z4s< zxiM_h0DVKXSXs|p6s)bHls>Ec<2c4ZBEXkaA%Vb@G6y-@T!?QSp6;;8~P+{Es z#np@dHE^qDVN0Y`u|SsM<%vACx>AAQ#y3;5 zIw!4YHu%@U2gzuf8w+MYbIT#)`nZQG#Y`E~dFmnn2&(9a(yw3=#W|k@h47XTd(SAy zR$;C6Jqc-7K1=ipIV&SwDEs{b-)%`t+c7HPPv4+&Nf`kw-|l0jYEFiWFd}O|nr!Xs zH)f{RJ(v-{2fD+D7-NkqxNvL7$5I1&KWB6`OCB)kq%o(xD=j#KGXq?9X_547QLR zoadMHKXx{qYRvJchapKoqALsghmE|bJV<766;wLEw4C8~H0B5X_-<3kA$TJcEcu0X zxQ?(v{8+;w*>CD5O=tbIv>gPWP9CW@2B~~Equ{IZa=y}zMabMV{JgKU194a*Zg}Q@f4E5&Ic&-t1`vm2sL0*$h0-4C#TMScI@neuw`5Ni>7RW*n z1Y%&Bq$_-$74}{eOBBALz`N|w>NgfCP-uYP(vqi+=fq?;*jVc1*f6~ME5o#3m7%kG z6P*^wUJikhfE)Md7R_$KV6Tj3AW>q+wBVups4l#-ueRmE$H(eR#V4}h7NwYrHay1*p!yt6u~Xz)=T46) zOxax%7GeR*6rqw32MK{c%(}vn5^65h%Pg&|S&jMiro45C#p|Cp#D|&gfyw^1(GEn} zFb{Piz87p$!A@RGnk$2piqGO9;`yKr4dI|VC3xb%Zv0zSzheRZrw<4ePLSeALkC-2 zT6W`BoP~X@{{b~oNkIHBoN^QX>8GnTZ!tT4h}JCh^)r&l?U|YCALe)a=)y3r9>MW! z#^y2usLAqqh+X)0?jz({{s5l5rshi9w3e~89ewm_ z#~>c$(|Hie7)bRACl|KR00*bPrJY42McGMaxSUf#vrXOSRx&D>!a<<x#FwqjoUd0Nm_4+_sif%K9F~xW1!c%lu`+t|<$}TRzwQR~n}y;#%-JUXBn(xM z%vC9=xF-@|k58~g9T?zfWPpNjJBdeZ3*btqxigOgqP4|Cj3n@kma~WfheiS+{CIxH z9}wvrKuM$J8>ynRJ1QNnU1`hkov*@N+e$b+E0!DfYsEGEU*_4ScDhru->IBu1CPK% zup%~cK`5vq&MWX9w(b4)N_2@nB7;yk--8y-w2v$%YZB%QBaLo5C((I2XAWZixVAZ- zNz|>-Jo0wI9^6CixP6nZjY~(co~HW}0YQv&z_-w>b8gQ54jRAH+erm^RCfaVR{WdC ziKKc72i5m@AoK#bO>3!RWOtOb+|O~g%jY-6^j z=YNjsDr^v45gCS06s!C_>}Spti#BWWg##6)8$0Q+zd#R$R=sT(Ul+qDBuhxzCbO{G zyVZ05uv`Yy?YKXOgu@`GN%T6x1)KljH{v>v*T6z245Fg{hP&_(_9n9j(JZ{E$T8>a zUkMj9L{DnDm&|Lf>4Ubl1=VjCU${G!HWk%wCb?W;wc$87%ok7YT z1f9l5i~9==OU&bNl7HatAD%dY@Hzgf;0SLg^d*0ZsIV~r6h?Q)(GRdLMc{uMuY4^C zGVMW#3v+vVWsULQf8!|4gZ|bbwBWBgJ$~({i0`6`|G`O`w#XpPCW3bg53cw5(R>o#j>qJVsm~BgP z!;%P%db-XU0nAQ`Gn{{K@|zMK-#XGc#){trvS7_Az1KKZaP8R>GT&&cA0w=zDb*pa zPM->_d4I+99$zvQSjNp^V~htxjYg@}7C7tj@pvW+qZ_ngxs8F_}Z#Ux%@K!yYu@4EwYLdV<-Brm1#E! zDx+v&hr#Qu&o_9t{+`#o*%!DbWVHfw>(sWuyS_XtSHM(-z_s;AmDH5u4(}5T1zn40YFNG?7Gu>cjXMn?iE6GodH%9FkFPdY;J=I3H`QI+k&7niG81+W zRh16TT2B~Wwjyb<7k&yeRu zItl}tGm@{!>TTekG8~x5(a@&(5S1Du(r+xv(f3J|jaDv4tWN?&J)`Cd-Gf%2FteMR zaD(8&Y-G|$;w@DpKEMmqqx+rf3qCBr)>%D!^?2~_;(Ik9D;qo~ucF$5w=&ybo69e9 z4eI<;c(>PE{pLEeQbhyb2QLwGeJ6AQe%u5(`z}AuQ}bZ(px5=fgSLsiF;@p|_2vHkvUK4nY^;YH4AbuB)wul-br1e18{<4pstR$)xnlJx>pb1N7kUj!>O$AI0= zHcyb;p7+)Sctd#f;9+~S_M~a2bePB@nS2`N1=f7vDCBrrZj5J3+yD{TZ0AgJNhp*^)$oZ1sl;Aa!t(mPxSxoVd@bw!Wq@i4lUYdPY z+1qe>P-}FP4&&4zAaM`; zS1dJeGc>j5M9Y?mOFz$ZLue}WXm%r@70MRSnj*Q2z?RrM;&K}Q{ZUtAd-dC&JJM-> zIR$9uj`;0{wyQmfG%enF`m54b(ss>j{70TH0Xa9c@nafe(t-?qq5Ijen%#X78nl*X zbFWC$o=5u;8#%#OpwsRlTt^O7xH|4J!kF>)>C4&i*FcvoZ~w?0g7lLfzNN4r2IwqY zTlEW9fW8&)s!4Wk+MOhq*J#||{`+2$Z=A_VMBrbpEN<718wU5P2>h^40u2$oMLthw zwZ(O~tCv1ZinT^|_pK&-Sg*l8{JV*?wrp6d0RfjL3C3A6YVR*s3VjYF7=kcFgm)}S zSS=OPhU1`*>2XGGK7UnI%CyAx{r)N>vJtcdo{^QU@6ETmyVAu>vRE5U<-BwJH4p*u+YU4s3yrWTPOnRRKaNEGcT~zf!Nj!)zAHS0Lg)Ue{T1=F7ZiaB!Y zLl~Vlx=4rFWKOq_%Ho^K(UXZ3maqG6IBqAwNAZe(`Ncc`#C6*-OORf*bAEP?Tpm|x zdz*(%8dIqQBLkU2&T}L`vr?nr689&f$d3bpI1Ikf8^eclM;D@=63nj=Sm)-GaqcEN zN3~6a?Rg`X*y4aP0MsOeO^|V7Kaw!sCGZ1tb*~+xo_`kY#9Iij@G5}v@ya~s?6w7@pSD;g3sy#$WXPSB>voc+W&MzlAddmGJ#}H5^I@%%jc1x#$M?4P2gIbTTcR=Y%Tzu%E#W<{|L&_Bafp zbs1Q zdu!EK63B%U*}Vrh>5KQVe{aWAx{uV%oW59TT0&C$27NGZ?~-X7ZmbIe!Q<=^kC@_ z5B;FjUShh)*y2eo?CK3p!*PH zZ7MH22;O(GFx`wfc7gli2Ta$9)(|o^{UHIFUtU}+U?sgVE|BZ?J`LeRpJEI2HR9O- ztdFc;!!6LXd+k{-E#4tKx;mgQo45Po|Ni-2ZIBe&D&!l`)pi(yM_NvZ{PAg8zlm}l zfhtgd#V-f^$DIJ*_7Z|2SM}EpTHwRWGu~0ar%(iEKXhP)l_ZgLgX4qkPOBw zp`g~_4QNbHqlZ_o2umkpW#twVg%iRkcW+JqP5%4*WGU9PFGV9Lv$UD=Rv09cYAcpR zLH9A_`{w_bOjcCe0z^mFf0_p4ilEn{rJYAJkdY+DpqIH_VR7^0Q#;JeW;SfC-INmzX*o;MctADD4Hc}3HZNhrP0RAiMp8v+;SPBa z0zcT^XWEP<_?O?L=y|IrdMIwy?ddEB%g0oY_&F!y4xw-IW6rD5q=dcoxlXb#DDDf@*w*gd8FjlH(ca&a$j^D6QEeh-o|_#2rWZ}`4^5(Zgoez)uW zPote;$jD(l*yt!Va8!A)2LuJA(lc{L9ai>(gNdx`m?$WDS%Dp?^oQb?;m2t%K)2}GbLXl;vRgqH@?dN-be&LArI;5Zg|Oe4{4V}k z#8U`T5IYI#I$!lOF;8Pxu9qcKBl?v??()Gan($b0_!3Oml7AGWNp|Bs|9RR3Rf&`+% zrBvYSINYZ{pw<8xmZYTytvg4^o=xG*SPpkAy{RXA3l~kW8LMTpZ+k?r%8Z%q+boVb zuQNQojCC{MJ{*rK2(scWZo!4^U%TovGPZgQ(~;F(?aFHF1>b5O4x*t!@N~No28yOD zU~n|3O<4T-g5<8OGx|d+ESzRYq>h~i0`oQmRcI=jNH1R zD%){zfVL|qOG{ga_M#?+)7qq|y+zIGw4d`mYwt`=h-{8-QA{i`PykfKLGd|?G*`6zMy&Q_KN6?K&hFpx+dPw0}SPrynecIGq->4$DBwAhi^ zw_iLMBX7B$_P9IpUR93Ef!k!Ir;fKjN zg-C$bNv?xc2{q}+(uq}@=TiyP<2d60mAcFL{G~l+OcfT7%AFrk$hA>yF zA*6Gd(!@0ZQwR>l^j2csi+F9>Np0@u(@MP;o-HfPH3y1SAfRhH3!n)Vhx9>21v!i! z-1hCWOYUO|mZyR~^&Sf#+PM@N0O+P@l+^bukZhbZBVF2kDs^6q8CM=3mM3ey4e!r% z@Kvv;a>8GjHb|>jT~y-X(T92wRo-s_*;fL&nXfkvY3*8)IgOwU-pC8*IIwRAi{>cN z)`~1)?{IqN0TV`^h3037dJWp8oIO))buvRIcL9g*&nj$QJd8~ty3A>Cz^5zBe;LH` zK@2pL7u7fp6LiIVJjq$9*Yr%r=FUkHOm?X=+Y`yILe0l;ma{~``F?{S>$ZgQWFK~? zzE8vdFrYGj5Ou{7p;GXR9vZDGa4b6uDNkHlTc;~GXbbLEoDoj-J{v$J1SP)=3Zde% zRx$=le9PIgr>6jV-a9b;+9ma#Do*blGVPD2Leiv_Z8KmwBW@Z#(?R8$Z>{fN4Z*ltF-fAtFqFH`fZT?7|!+#_&i z#L_HfD)j>Oq(s4tog@7-;$E;j0A8r~w&3At@s0vRznx`ZY#OYM)(Um2yuHGX5neuW zEnCEubqkG1$<>foko@grPq=*-E|gH^8uPWd&HO{$C=3@I;XnSWf0RfI;_@~6oU@X{ zj^ijg;)-Y}YHPn|bicL_>t#+0vYF$bLcK=PwF3%6DbB+2h8cFS2+dI%!mPv+Q`Iga zPp+3BD6v$!n(RT%a&Ds@=Zs@Hem1fg`gem-D{5CwPOJ!O@N*%?HuBz?z&`pXMssbRIYSwI-hphK->-GTF3ga5x9K&A3(p>1HN5cG?*WBBR^(T-S%kX zooh+{JWFD6SDD89%TfAkVyv8(227Ms)?c(h;AAU53mkW0MH{}qp%3^9W7ILMZ;dLR zg-CW{OWxe)u^hB<7zZz!oQp=BZ25OouI#ny}`joHiqy<{Qvr z&<(PKij^YcdySF~0L^3uaVjGL1w|I0wWjar+x>Otl=cTP)iy#an){-05>ZUUQR0*S z5HWRubatFQWqg%+aYWpcMDk~%mx2c|%$qXRnLo@c`%Y^y2L_iGp3cEqbD;3M0>Lzt z_CjU2sPKYcJI+3$5!Y$*S<56h=lHo;R7^_GuCg29ltZnb$!(QlP{B=oS^FA(u^C9G z@FL5@29oW-FDY?AIxK&8iz)p+x1;9#`y^(@;Mxwh3mb80Sn*=MCQm=$!#M?r)wiq1 zcVa>KLuZj*Z{Ulm&rez1dIM-+T^lh=}!Ga@O8r#qMr{NxqK4 zU#lDU8dxgT#AnT-rq$z`W1dgPs`7Ip%gF#vT}!e^3B(6*2hT@qe1_?O$%YK^zM3+r z@KV{-&1;I|<*L4~ISL}gZM_;jMHXhIN)B|b!mGP^1jo$OgVDYJDz)5PSI2J(?qghO z)&7#3Z7Ux++O$M|ww&3jp*(2wh`JrsAbRp~_? zHjoov4zG7B9l9wTgnDv{oN=By!Ij3f?Q0ud+F-?6yAGjWE@hl;_v$0c3j78 ze({9xw>A7i)hW50`R9w2f|!bwTZG=>Id@MK8B2ycCA{jk8iiPOlsTW=5+M@SL+jVz zBnptPb-UKsLOjo^Dq3)k_X8gDC~^H3I~kg_MMf)AGuF}fW7yq3&KC<1#w9Vz6Ecr~ z;9Q_~J}`wGN7XBM`a{wvvo4N_x}Rb~Vqr{Ujo%^qfl2eZ$(VaRXuihwU(UVv1BU|( zq~PabcCQ7{jLsm_+Is{gLGtCK8<<_QT*xQH5qn800q{`$*r?5|Y2uG=+1Ti3*7vGb zw_afx58?Xu)2=+WL}wadZ+DOno@c;5lD!BgIjw@r7QK5%a2-MNiuU8{=gBYspCleX z%~8UwZ#WRO(e0z!*<~-0WHG4i)Dz(dj!`C?2H&sb5M8wh&%#=`e}-5vTC#e8#5)WV z_qM-l8!CT6}nXSK6cKf|M~#mcDs=3tmv1QsH0I zPB8Jho9%32mRZ$9u0l)(<_!^nwYi1_l<5d|CJf@fPrpKWm94}%OOwiWa)TNk6d7=m zz7nywd>4XuBRfu+B_Op>B{e}yw&O2hIkY&^+tb5OwMC@?a?j#7I)G8PHvEV|r%K#l zG>Z3d2SNk_PG2zzL(b>ZAYC3m6VFL&g=?h+WxOpIllv6{YXoOmYS%*eRmRBr7rHaS z2E~3`A*b_A!b31B-F6MdB$*B}5`xe72O0yfEsY)t_Fwa|j;7UCeKc9F# z(LzU9^7L@&f6f`NCaHNRaHEX6Ur+Oaxlt-0`bkznUwoA3LH)v&BhmoIcLhR%NUhsL zaJzaz^cZUOtOKln6l$xI+C5D$lOe1rp}YZB@{fe1zY;}D71r65+9CQilTQ2?s_d0! zXj58Q)HFXVGL=^dwl=6V%NLIHBkMX;Zo9UAq{r`V6o1GRk_6;Wzs!`9DSEZ_hL*{= z^s)SyY)W(VrzdJda?2wjl*#DAEIAHr(b5cd2QQeE)YpD|*_W3L5t%Y7$5)F~g^(22 z?@Ns(nZg?;_$^^W8#(5Ft99Ya^o$sIEIgJI?Cf(~59<>yx-g9=rse z7N1XHN2sGWswqvn$xMUj%_|avYqB z{oQ0JCwgl3zTzs5b3B7XYL( zh?|*@D7j2c#BP1ffx6cH0Ymy0Wp;^#1YHitMblB0{|rF5MkQQu^d*&DtjmW|2-*d` z@*c0tw;S z?+;UaoPh{Wer5Ue{&cYqnDkIE4vVT6f&dp{IZZ@|pt<2thhg!^5gI7msBb(Yt*1=@ z3oCw>(PJ{kk8|vl$x%5wICth)NWKkkf91Gnm{#SG1Gq>-u%u7$?JB)6emHb!_#B9r zn4*n1h>-Cra>a+cYKT0(uiG!|LEdq7>vOjpTC%kdNHKurX7|%jRFPYJFbgWGKPvte0+4`_l)9KippMnJ}?0B-yJQGxELkA?(1B7oZ|+bUR?PC-Egs{&WVdJ zJd1R#S@je|F01bJ1=``b$AavFTT^KU(n^PM7LJ_DoUiv4NS+UgEmg)H%l7GT%*o$if}_$!?nM zrFoP^k$=MqP`-F2@GAXv*g=X zOaX|V;kVI0`f$AIS9l`WN1Vyz%vQpayq)>|#J>RCuWsntGEC5zU&@qAV_ik-lN{{f z9@V)Uu=z}iC9X#-mQIe0qg#0pI}%#8$Ga4UGz0J?=X7BN`hw@XU2JT{S^K96 z>}bzCG)lX^I>C0j<##J23ZG~~F1Vi=MEd%<0E_t>8E?y)%M#n2yA>zkeX#iiF-%9kj?MtAC0+(kSLC5bK8zou<=hOha5Ng|D6Qc zijci&uSI!@ovtK}qiwV~4HOB^#Susm(K{&De7;2&5TpCxV9i z+UBPt0vW{k zILZg$7F!NoYwg}R-q6XZW=e>!p3E%wS|o>*U);HDYyt+>zz>n6F^?a1Te)ORVWTzE zFy@*@APbega7o3&H~u-mzOOnZ(Vh$hiMQj~Pg=jyNexo#YiJXwvZRtojPBzhkEyM!Q%KCQ7?K$^%FQxCl zjtn1zfvPi{7{KgL@CC#3?V#VK_}dmJuM1-zMET#DO9@tXMO>^7CGRV$kct%K`q%3I zuI(jKS|l4EQ)cUKR0Ef?eb4sqfe){_p&0s^mf=0JkPt6p534L%-8CJijM1h`b<_7(-tIp)FQwHdM>h^t$7GK zIKAZkQB%5>(KkYsOZPE^bPzitO(dn!m_UeLv(CoRNMl!g_S8JOoP#`g>M2d`6`U_y z?fT(BM;$G8b#m<3@aFPmj^XZd{y&Xss;(rchGom8^j7gs2e zhJf?Mx`Z@BESALLO^-tq>S_Ky?-V`au{FBg3>wMra%d~PkLI;X2`G4Bu$o($o{d#D z1G(QkD&=9rb0GR+Eu?Op7A;%oyI`L9U~Di|61FYSKh(d`5U1Q_709c1XP(_6aHMpw zY+2?+>gPW&0~5YC!(FnI(E9}e=&RQ$RU4>a_^f=C1WlGhLl}u|mt~o4UY9f$H!pw% zuQ_-nTCBqMC$k2}WsmAiAc081QrAn+vQ6TOTP?cUa7mq8x~-W~D}lxNjy%7rT$&3N zM@bquv-}F}V2A`V7}X;q{R~fh5RKG|5p+;k4Np8v3;fIp1I5Rm)NPXhb7%@5L>dEM z`QS8ez~KvZXfHyx{(A()t9!Gr9taGwY2c+VEc$_^A-K1j3Q?_n{x4<8U4`x)NH(hs zmp8Fj0<#=0e^EO>(ur1aBGQ>b-9=7T%MZ>NVhrOe8nxwr3S>}&c&i21ApL0B6VnLA zO?ytaq~kN3u_gbdK4g@!y!<9MLU|KdoZGybg?7KHt+9A*Y2@-M(HR!R@ca2#3Amvp zv)fHPvbGh(rq&FwZ)ycVVg)ymup?H+mni7k5YZp+SB3npM9W}i?KPlB0o3S2O4w(k zNA-3z6I_Gf1%!l7u(YjL*SDO>s{DtY?_!-<&@+jvZUAktzFtNbyjuO3sxu$|e6ODG zE7>k=NWoKzdvkI-WA07m)5S^vJ1+~`vVIFp08-ZDx0|u)IKDO-dkP!h4neQy?*|rh zwir$*q)UB#wB$=-#D{k)C#E=W5&c%d1lqBb2}<~STQIP1gyltXBa7ZVd=Qn(0I_^c*t^mLNXt^7nYHky%rP(Sq#YRqHWFt^(eo1oh~kkMXlfB3CAw4#oL zpW;WqZqo^aK(D;?pk<3UofIN02Er#nUu#3ifs41mWzkdW{lv=cvkg1Jv(nYd;=JfC zya>MY2e@kfBce>Mqq~<0wr}j;goEIIf3M{p0qm7+&MN8ey#BH{s~M&f&DUr>(P-+& z0xUA7bMDGAtTOW=c|jZhATP`D^-dXvA&`cKYO|zVPOa;#4bFHT&l2`}$=sjB7ykwK zd=*7iz8cs&SoBy+ydx8vqbT4Nd?=4`<8pV6GoSr+>o0*F*W87b{GmJoK{mOhs4(*~ zGFN1Fg$`i*!>VQ<1Z_yK#h(Za(DH!4hT9FvT4x7`+=Jq_R#N!%%Q<%GH3EeKvUh41 z(oW~D9O4jZ<=P9}*hwj@j0u*tiW;KA{HAoB*O46DrPJ;hLr_Ex8rDV~`wV}N`YJ=* z;ddQ;5K&{cz&fR}a4Eb)SYzS*O;+|H^>ZIJAzH*<&}N5N<$1)SR$cvRjrA7SY?dOu zD{5z;;J24pPofLucl%7Df5<#$;*cj{9|!cJgK`zYM-XtRr8Fl?jH+!mIN;Dq&L&Ie zp}5d#_SIlJKkXVgQ_jjSWKp$YaL*Jl2+XhQFKPum?_2YJS-_kr_fImZ)FZ(MYdCB6Bb% zhVaC^BSKzE$w@tR*5tCXrkZYR&l+L~*dI%$NUrBy^B#QqBiu8pXgbBunuK>^WNU-f z`*F1bWlmoQ3A2{`8UFu@xbkQy)Hggc*3rn?SOy`o$7J8)Uh8BTu6(I9eV z8~YxvE!nf1n6d9kN`yhp&?Gf#gmI^Czw>*~`M&o#&w0-C{`;Nteb2|L(RN0q?_DCp z3aD6R%PS#O`Rj0d^jFTWA1w|B6Cl&gSCpjBVt4C_h^OS-!Dy#VR0X?i4c z!&T%MY^PTzIR9LIF*ng?OENs`!fS5ALj)3|IjX(62qyW+Lvs>EWvEvIj#Kks7AE8m zJ?_5iAqihV~* zfb;Y!D$NnLLK+~n^Mr7Z?t7k7s;x>Q=)b;c;(2FcJ*A=ip2%p^C)@xfWq9_*^mST> z=mWdWRw-iQK2;64Uu@Pm{^7||W;2;X9{^y8DV4Iz7@hD}HfW)+3&_Vp%jI@M{okt0 zY-k#S&)&jz?j`U|h;WQv3;J<)I?#$CcdgC++D4~wPck?N63OY3S?-W_PSx3`uPT=n zx&5%;jOubMIIa8gp8ZWq&%$_Sr<2=VGT~O>P(#G0(x?f!^DFsAII%F-(|z)9t)n`p zDkj@f1+X-~D`Rhl)(+QOddFdChT|xPMD8p#EC+i2&*cpKc-MjgE^OE9nfS9E2fQXP znLQM~?ouNzB^*8rM|l`lon^oa$Y zD%%n0==&19YgSUGTfi6VfeKoCGClnW($sF`>dm`x|A=pv_?EXr-YXo5Gh_2}D#%e=zxcV~O>#8hq7L(93o^+sxx??R z0%3CwzETwp-b>KB%34#D%7w&~3J4*3xjUjU1k{qehs)gs?gq2cGsN!&(fIS29BagN zh;S~sUhr5It8sJygz3>E|2h&F0L8uLVzn)UK{^6SJu?5uHJ{Mf2CvNNYwU8YmyEQM z9?IpZPRl2h2JrZ3YZQ{KM=G|l7I-w@r>WKiv2Eq`&W5}03UY4or#quJ>}$i`GA-`) zTMca>zrb*cZa4FFlNAo-nTn@gcQ_^O*xqFw7h)BE)3=i)(FdG!{LX$5mR4mQ(oJ3` zYO}%1|8m=^C)#0p&Zl_x6>l{#`3Aqf2{axBtKjt(F-isIlG#)-Sl%R{eK0k_bxACt6CX+2L7G}U~}LNhX|E#bL4#g%y}Sh!ais(Wd;(D3@fQ7L#Hz zb9O58viB_SW*`@0hs8iBG>9#7SI}Vp)7sJ_^AxZ2?T(?u#@y&(@sO3?$T18SG{ddP zCL->YB3q>}g;G>~ap$j-?29-vfe%L)Wqnr{C;;H?2-*e})mPU6`3P9W z6UNSueBY~Ez9dmv`lzLj;a$y~bKx{paJFM+e1L2F@sono1z+=4UFEa_!$8*PuSbIq z9|Che#gSRt)ADuPycROwz8E~J)Crrf`)8uq_=i!j9-ko-Kw`bcW}!-N4Ma6xsNhhA zwh^J5s3$B|nZgD}Z4E$hF(Gg+`LbV}dYRCzrHOKK)E$NP#V8$Y*jH)29B3BuW~?U;$0i@cPL<+aHH-`rbM6oXK-B zFJa$I-X7Ut(VSh>_&epj8{CrNy+*ZnO}I%Tg(nZWN){VL{CInv8PeK~R*jUxD6Cc}WUOu?!5GvAX4(l-aGvk!* z!?Gctg)OQVv(m`kW9ukB*)O+CQPxZFY3~Qx?84qL5b=KW?jhsY(%&os7M^Dd^EH$v zS`jR^I+D)B9Bhwgq|5{XtWZ$da+5bnG8d?LQeoE;x^&A3#L4;oo@uhz|Y^G=|~SkLOXbm z+Xke>gkoq<`*|X7M+J+?+R)@2Y@L(6uqBf;R8&f&6EVOwE8nQ$a%5-RBQt4bGxc0b zlQsT{cqQmI_i?2tdUgelI<`w^5O`V2WOD8$(xmo_T^G=*X2kp@dV-G(G@F*|h;UwT9ch{y|G2RHV zXAu2H(leE6|Hr2(@izac0)k&kC*@bniQ;wb|Ad;~-|P)%P_E%j(K;mlQF?`!xsi*> zf4cs3Dx~mLptVN|#WPt=wi4cNC>do0JgH*^~J>BqEnbP;4KL6{?06;nmfRWB9U4$zEGycOsx&xr> fHxE}*0+#*fcya;&fXe=J?55i={KnXyW9juTOuGA- diff --git a/blog/Building RESTful CRUD API in springboot/images/image03.png b/blog/Building RESTful CRUD API in springboot/images/image03.png deleted file mode 100644 index ce737d082e96100048128a6076caca6c7858e687..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16884 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 ZO#J_!fq`iO#6%mQ5@sm-0?0@p007|es6YS! diff --git a/blog/Building RESTful CRUD API in springboot/images/image04.png b/blog/Building RESTful CRUD API in springboot/images/image04.png deleted file mode 100644 index 534cc13c0b870682853e0bd5957af979a245430f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15912 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 un3+K0|ILH^wE)QbkDQr_2_)~|7JA* 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 diff --git a/blog/Building RESTful CRUD API in springboot/images/image07.png b/blog/Building RESTful CRUD API in springboot/images/image07.png deleted file mode 100644 index 6e03328930bd9a53c8884a289debc2b4e52d21c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16064 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 eK>7bm - -## What is RESTFUL API? -- In the realm of modern web development, RESTful APIs have become a cornerstone for building scalable, efficient, and maintainable web applications. - -- In the world of computers and the internet, applications communicate with each other using a set of rules. - -- RESTful APIs (Application Programming Interfaces) are act as intermediaries between different software applications (client and server), allowing them to communicate and share data with each other over the internet. - -- *Representational State Transfer (REST)*: This is a style of building software systems that use standard HTTP methods (like GET, POST, PUT, DELETE) to perform operations on resources (like data stored in a database). It emphasizes simplicity, scalability, and flexibility. - -- *API (Application Programming Interface)*: Think of an API as a set of rules and protocols that allow different software applications to talk to each other. It defines how different parts of software systems can interact and exchange data. - -- So, when we say a *“RESTful API”*, we’re talking about a set of rules and conventions that govern how applications communicate with each other over the internet using standard HTTP methods. - -## Why spring boot? -- Among the myriad of frameworks available for building RESTful APIs, Spring Boot stands out as a robust and developer-friendly option for Java developers. - -- Spring Boot makes it simple for developers to create web applications without getting bogged down in complex configuration. - -- With Spring Boot, you can quickly build and deploy applications, which is great for trying out ideas or making changes fast. - -- It comes with many useful tools and features ready to use, like handling data, security, and more, saving you time and effort. - -- Spring Boot can easily connect with other tools and libraries, making it flexible for different needs. -Motive of this article - -- In this comprehensive guide, we’ll delve into the process of creating a RESTful CRUD (Create, Read, Update, Delete) API for managing user data using Spring Boot and MySQL. We’ll cover everything from project setup to testing, demonstrating best practices and essential techniques along the way. By the end of this tutorial, you’ll have a solid understanding of how to architect, develop RESTful APIs using Spring Boot. - -- Without further ado, let’s embark on this journey of building a RESTful user CRUD API with Spring Boot. - -### To build a Spring Boot project, you’ll need a few prerequisites: - -- Java Development Kit (JDK): Spring Boot applications are typically written in Java, so you’ll need to have the JDK installed on your system. Spring Boot supports Java 8 and newer versions, so make sure you have a compatible JDK installed. - -- Integrated Development Environment (IDE): While you can build Spring Boot applications using a simple text editor and command-line tools, using an IDE can greatly enhance your productivity. Popular choices include IntelliJ IDEA, Eclipse, and Spring Tool Suite (STS). - -- Build Tool: Spring Boot projects are typically built using either Maven or Gradle. Maven is more commonly used, but Gradle offers some advantages in terms of flexibility and performance. Choose whichever build tool you’re more comfortable with. - -- Understanding of Java: While you don’t need to be an expert, it’s beneficial to have a basic understanding of Java programming. - -- Database Knowledge (Optional): Having some knowledge of database concepts and SQL can be beneficial. Spring Boot supports various databases, including MySQL, PostgreSQL, MongoDB, and more. - -## Step 1: Setting up project. - -- Visit spring initializer and fill in all the details accordingly and at last click on the GENERATE button. Extract the zip file and import it into your IDE. - - ![img-03](./images/image01.png) - -### 1.1. Add below dependencies in pom.xml file. - -``` - - // we'll use this dependency to create RESTful API endpoints, - // handle HTTP requests (GET, POST, PUT, DELETE), and return JSON responses. - - org.springframework.boot - spring-boot-starter-web - - - // we'll use this dependency to interact with a database, - // define JPA entities (data models), perform CRUD operations, - // and execute custom database queries. - - org.springframework.boot - spring-boot-starter-data-jpa - - - // we'll use this dependency to establish a connection to - // our MySQL database, execute SQL queries, and manage database transactions. - - mysql - mysql-connector-java - 8.0.33 - runtime - - - // we'll use Lombok annotations (such as @Data, @Getter, @Setter) - // in our Java classes to automatically generate common methods, - // making your code cleaner and more concise. - - org.projectlombok - lombok - true - - - // we'll use this dependency to annotate your Java model classes - // with validation constraints (e.g., @NotBlank, @NotNull, @Size) - // and automatically validate request data in your RESTful API endpoints. - - org.springframework.boot - spring-boot-starter-validation - - - -``` - - -### 1.2. Update application.properties file - -``` -spring.jpa.hibernate.ddl-auto=update -spring.datasource.url=jdbc:mysql://localhost:3306/usercrud -spring.datasource.username=your localhost username -spring.datasource.password=your localhost password -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -``` - -## Step 2: Create project structure. - -- Create below folder structure inside src folder. We’ll travel through each file one by one. - - ![img-03](./images/image02.png) - -## Step 3: Create User Model - -- Models define the structure and attributes of the data entities that the application manages. - -- For example, a User model might include attributes like id, username, email, and password. - -- Models often include annotations or custom logic to validate the data before it is persisted to the database. For example, you might use annotations like `@NotBlank`, `@Email`, or `@Size` to enforce constraints on the data. - -- Models are typically mapped to database tables using Object-Relational Mapping (ORM) frameworks like Hibernate in Spring Boot applications. They define the structure of the database tables and establish relationships between entities. - -```java -// User.java - -@Data -@AllArgsConstructor -@NoArgsConstructor -@Entity -@Table(uniqueConstraints = { - @UniqueConstraint(columnNames = "username"), - @UniqueConstraint(columnNames = "email") -}) -public class User { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @NotBlank - @Size(min=3, max = 20) - private String username; - - @NotBlank - @Email - private String email; - - @NotBlank - @Size(min=10, max = 10) - private String phone; - - private LocalDateTime regDateAndTime; - -} -``` - -## Step 4: Create DTO classes - -- DTOs (Data Transfer Objects) play a crucial role in Spring Boot CRUD applications by providing a flexible and efficient mechanism for transferring data between layers (Client and Server), optimizing performance, encapsulating business logic, ensuring compatibility, and enhancing security and privacy. - -```java -// ApiResponseDto.java - -@Data -@AllArgsConstructor -public class ApiResponseDto { - private String status; - private T response; - -} - -// ApiResponseStatus.java - -public enum ApiResponseStatus { - SUCCESS, - FAIL -} - -// UserRegistrationDTO.java - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class UserRegistrationDTO { - - @NotBlank(message = "Username is required!") - @Size(min= 3, message = "Username must have atleast 3 characters!") - @Size(max= 20, message = "Username can have have atmost 20 characters!") - private String userName; - - @Email(message = "Email is not in valid format!") - @NotBlank(message = "Email is required!") - private String email; - - @NotBlank(message = "Phone number is required!") - @Size(min = 10, max = 10, message = "Phone number must have 10 characters!") - @Pattern(regexp="^[0-9]*$", message = "Phone number must contain only digits") - private String phone; - -} -``` - -## Step 5: Create Exception classes - -- Custom exceptions help to improve the clarity and maintainability of the code by providing specific error handling for common scenarios encountered in a CRUD application. -- They allow developers to handle exceptional cases gracefully and communicate errors effectively. - -```java -// UserNotFoundException.java - -// This exception is thrown when attempting to retrieve a user from the database, but the user does not exist. -public class UserNotFoundException extends Exception{ - public UserNotFoundException(String message) { - super(message); - } -} - - -// UserAlreadyExistsException.java - -// This exception is thrown when attempting to create a new user, but a user with the same identifier (e.g., username, email) already exists in the database. -public class UserAlreadyExistsException extends Exception{ - public UserAlreadyExistsException(String message) { - super(message); - } -} - - -// UserServiceLogicException.java - -// This exception serves as a generic exception for any unexpected errors or business logic violations that occur within the user service layer. -public class UserServiceLogicException extends Exception{ - public UserServiceLogicException() { - super("Something went wrong. Please try again later!"); - } -} -``` - -## Step 6: Create User Repository Interface - -- Repository interfaces abstract the details of data access. Instead of directly interacting with data storage mechanisms (such as databases), you define repository interfaces to declare methods for common CRUD (Create, Read, Update, Delete) operations. - -- JpaRepository is a part of Spring Data JPA and provides CRUD (Create, Read, Update, Delete) operations for the User entity. - -- The first generic parameter User specifies the entity class that this repository manages, implying that User is an entity class. - -- The second generic parameter Integer specifies the type of the primary key of the User entity. - -```java -// UserRepository.java - -@Repository -public interface UserRepository extends JpaRepository { - - // Developers can define methods in repository interfaces with custom query keywords, - // and Spring Data JPA automatically translates them into appropriate SQL queries. - User findByEmail(String email); - - User findByUsername(String userName); - - List findAllByOrderByRegDateTimeDesc(); - -} -``` - -- By extending JpaRepository, UserRepository inherits methods for performing various database operations such as saving, deleting, finding, etc., without needing to write these methods explicitly. These methods are provided by Spring Data JPA based on the naming convention of the methods in the repository interface. - -## Step 7: Create User Service class - -- Service classes in Spring Boot CRUD applications serve as the backbone for implementing business logic, managing transactions, abstracting data access, centralizing business rules, promoting reusability, and handling errors effectively. - -- By placing business logic within service classes, you centralize the rules governing your application’s behavior. This makes it easier to maintain and modify the behavior of your application without having to hunt down logic scattered across different parts of the codebase. - -```java -@Service -public interface UserService { - - ResponseEntity> registerUser(UserDetailsRequestDto newUserDetails) - throws UserAlreadyExistsException, UserServiceLogicException; - - ResponseEntity> getAllUsers() - throws UserServiceLogicException; - - ResponseEntity> updateUser(UserDetailsRequestDto newUserDetails, int id) - throws UserNotFoundException, UserServiceLogicException; - - ResponseEntity> deleteUser(int id) - throws UserServiceLogicException, UserNotFoundException; - -} -``` - -```java -@Component -@Slf4j -public class UserServiceImpl implements UserService{ - - @Autowired - private UserRepository userRepository; - - @Override - public ResponseEntity> registerUser(UserDetailsRequestDto newUserDetails) - throws UserAlreadyExistsException, UserServiceLogicException { - - // logic to register user - } - - @Override - public ResponseEntity> getAllUsers() throws UserServiceLogicException { - // logic to get all users - } - - @Override - public ResponseEntity> updateUser(UserDetailsRequestDto newUserDetails, int id) - throws UserNotFoundException, UserServiceLogicException { - // logic to update user - } - - @Override - public ResponseEntity> deleteUser(int id) throws UserServiceLogicException, UserNotFoundException { - // logic to delete user - } -} -``` - -- Now let’s see how we can implement each of the methods in UserServiceImpl separately. - -```java -@Override -public ResponseEntity> registerUser(UserDetailsRequestDto newUserDetails) - throws UserAlreadyExistsException, UserServiceLogicException { - - try { - if (userRepository.findByEmail(newUserDetails.getEmail()) != null){ - throw new UserAlreadyExistsException("Registration failed: User already exists with email " newUserDetails.getEmail()); - } - if (userRepository.findByUsername(newUserDetails.getUserName()) != null){ - throw new UserAlreadyExistsException("Registration failed: User already exists with username " newUserDetails.getUserName()); - } - - User newUser = new User( - newUserDetails.getUserName(), newUserDetails.getEmail(), newUserDetails.getPhone(), LocalDateTime.no() - ); - - // save() is an in built method given by JpaRepository - userRepository.save(newUser); - - return ResponseEntity - .status(HttpStatus.CREATED) - .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), "New user account has been successfully created!")); - - }catch (UserAlreadyExistsException e) { - throw new UserAlreadyExistsException(e.getMessage()); - }catch (Exception e) { - log.error("Failed to create new user account: " + e.getMessage()); - throw new UserServiceLogicException(); - } -} -``` - -```java -@Override -public ResponseEntity> getAllUsers() throws UserServiceLogicException { - try { - List users = userRepository.findAllByOrderByRegDateTimeDesc(); - - return ResponseEntity - .status(HttpStatus.OK) - .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), users) - ); - - }catch (Exception e) { - log.error("Failed to fetch all users: " + e.getMessage()); - throw new UserServiceLogicException(); - } -} -``` - -```java -@Override -public ResponseEntity> updateUser(UserDetailsRequestDto newUserDetails, int id) - throws UserNotFoundException, UserServiceLogicException { - try { - User user = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("User not found with id " + id)); - - user.setEmail(newUserDetails.getEmail()); - user.setUsername(newUserDetails.getUserName()); - user.setPhone(newUserDetails.getPhone()); - - userRepository.save(user); - - return ResponseEntity - .status(HttpStatus.OK) - .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), "User account updated successfully!") - ); - - }catch(UserNotFoundException e){ - throw new UserNotFoundException(e.getMessage()); - }catch(Exception e) { - log.error("Failed to update user account: " + e.getMessage()); - throw new UserServiceLogicException(); - } - } -``` - -```java -@Override -public ResponseEntity> deleteUser(int id) throws UserServiceLogicException, UserNotFoundException { - try { - User user = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("User not found with id " + id)); - - userRepository.delete(user); - - return ResponseEntity - .status(HttpStatus.OK) - .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), "User account deleted successfully!") - ); - } catch (UserNotFoundException e) { - throw new UserNotFoundException(e.getMessage()); - } catch (Exception e) { - log.error("Failed to delete user account: " + e.getMessage()); - throw new UserServiceLogicException(); - } -} -``` - -:::note -- The `@Service` annotation is used to indicate that a class is a service component in the Spring application context. - -- The `@Component` annotation is a generic stereotype annotation used to indicate that a class is a Spring component. Components annotated with @Component are candidates for auto-detection when using Spring's component scanning feature. - -- The `@Autowired` annotation is used to automatically inject dependencies into Spring-managed beans. When Spring encounters a bean annotated with @Autowired, it looks for other beans in the application context that match the type of the dependency and injects it. - -- The `@Slf4j` annotation is not a standard Spring annotation but rather a Lombok annotation used for logging. -::: - -## Step 8: Create controller - -- A controller class in a Spring Boot application is responsible for handling incoming HTTP requests and returning appropriate HTTP responses. - -- It serves as an entry point for processing client requests and often delegates the actual business logic to service classes. - -- A controller class is typically annotated with @RestController or @Controller. -Inside the controller class, you define methods that handle specific HTTP requests. These methods are annotated with `@RequestMapping`, `@GetMapping`, `@PostMapping`, `@PutMapping`, `@DeleteMapping`, or other similar annotations to specify the HTTP method and the URL path that the method should respond to. - -- Each method in the controller class represents a particular endpoint of the REST API. - -- Controller classes often rely on service classes to perform business logic. Dependencies on these service classes are typically injected using the @Autowired annotation or constructor injection. - -- Controller methods return the response to the client. This can be done by returning a ResponseEntity object to have more control over the response status code, headers, and body. - -```java -@RestController -@RequestMapping("/users") -public class UserController { - - @Autowired - public UserService userService; - - @PostMapping("/new") - public ResponseEntity> registerUser(@Valid @RequestBody UserDetailsRequestDto userDetailsRequestDto) throws UserAlreadyExistsException, UserServiceLogicException { - return userService.registerUser(userDetailsRequestDto); - } - - @GetMapping("/get/all") - public ResponseEntity> getAllUsers() throws UserServiceLogicException { - return userService.getAllUsers(); - } - - @PutMapping("/update/{id}") - public ResponseEntity> updateUser(@Valid @RequestBody UserDetailsRequestDto userDetailsRequestDto, @PathVariable int id) - throws UserNotFoundException, UserServiceLogicException { - return userService.updateUser(userDetailsRequestDto, id); - } - - @DeleteMapping("/delete/{id}") - public ResponseEntity> deleteUser(@PathVariable int id) - throws UserNotFoundException, UserServiceLogicException { - return userService.deleteUser(id); - } - -} -``` - -:::note - -- The `@PathVariable` annotation is used to extract values from the URI template of the incoming request. E.g., updateUser method. - -- The `@RequestParam` annotation is used to extract query parameters from the URL of the incoming request. - -- The `@RequestBody` annotation is used to extract the request body of the incoming HTTP request. It binds the body of the request to a method parameter in a controller method, typically for POST, PUT, and PATCH requests. E.g., registerUser method. -::: - -## Step 9: Create Exception Handler class - -- Exception handlers in Spring Boot applications are used to handle exceptions thrown during the processing of HTTP requests. - -- They allow you to centralize error handling logic and provide custom responses to clients when errors occur. - -- `@RestControllerAdvice` annotation is used to indicate that the class contains advice that applies to all controllers. This advice will be applied globally to handle exceptions thrown from any controller in the application. - -- To create an exception handler, you annotate a method within a controller class with @ExceptionHandler and specify the type(s) of exceptions it can handle. - -```java -// UserServiceExceptionHandler.java - -@RestControllerAdvice -public class UserServiceExceptionHandler { - - @ExceptionHandler(value = UserNotFoundException.class) - public ResponseEntity> UserNotFoundExceptionHandler(UserNotFoundException exception) { - return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ApiResponseDto<>(ApiResponseStatus.FAIL.name(), exception.getMessage())); - } - - @ExceptionHandler(value = UserAlreadyExistsException.class) - public ResponseEntity> UserAlreadyExistsExceptionHandler(UserAlreadyExistsException exception) { - return ResponseEntity.status(HttpStatus.CONFLICT).body(new ApiResponseDto<>(ApiResponseStatus.FAIL.name(), exception.getMessage())); - } - - @ExceptionHandler(value = UserServiceLogicException.class) - public ResponseEntity> UserServiceLogicExceptionHandler(UserServiceLogicException exception) { - return ResponseEntity.badRequest().body(new ApiResponseDto<>(ApiResponseStatus.FAIL.name(), exception.getMessage())); - } - - @ExceptionHandler(value = MethodArgumentNotValidException.class) - public ResponseEntity> MethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException exception) { - - List errorMessage = new ArrayList<>(); - - exception.getBindingResult().getFieldErrors().forEach(error -> { - errorMessage.add(error.getDefaultMessage()); - }); - return ResponseEntity.badRequest().body(new ApiResponseDto<>(ApiResponseStatus.FAIL.name(), errorMessage.toString())); - } - -} -``` - -## Step 10: Run your application and test with postman/frontend😊. - -Register user failed: User details invalid! - -![img-03](./images/image03.png) - -Register user successful - -![img-04](./images/image04.png) - - -Retrieve all users - -![img-05](./images/image05.png) - - -Update the details of John - -![img-06](./images/image06.png) - -Delete user john - -![img-07](./images/image07.png) - -Hey guys, that’s it. We have successfully developed rest crud API for a user management system. diff --git a/blog/from-ftp-client-to-github-action.md b/blog/from-ftp-client-to-github-action.md index cf282afe2..5f099de58 100644 --- a/blog/from-ftp-client-to-github-action.md +++ b/blog/from-ftp-client-to-github-action.md @@ -1,6 +1,6 @@ --- title: "CI evolution: From FTP client to GitHub Action" -authors: ajay-dhangar +authors: [ajay-dhangar] tags: [ftp, sftp, GitHub Action, ftp deploy] date: 2024-03-15 11:37:46 decription: The evolution of remote file management diff --git a/blog/sed-normalize-md-file-with-regex.md b/blog/sed-normalize-md-file-with-regex.md index 4524cdabd..65cce2d6e 100644 --- a/blog/sed-normalize-md-file-with-regex.md +++ b/blog/sed-normalize-md-file-with-regex.md @@ -1,6 +1,6 @@ --- title: "Sed: Normalize markdown file with Regex" -authors: [ ajay-dhangar ] +authors: [ajay-dhangar] tags: [sed, regex, web clipper] date: 2024-03-15 14:37:46 description: How to normalize markdown file with Regex From 485f4727e07b258c8a1acd2ec7a9ff44a3980bba Mon Sep 17 00:00:00 2001 From: Ajay-Dhangar Date: Sat, 24 Aug 2024 05:51:30 +0530 Subject: [PATCH 4/6] added content for Numbers in JavaScript --- .../index.md | 575 ------------------ src/components/AdsComponent/index.tsx | 42 +- 2 files changed, 27 insertions(+), 590 deletions(-) delete mode 100644 blog/Building RESTful CRUD API in springboot/index.md diff --git a/blog/Building RESTful CRUD API in springboot/index.md b/blog/Building RESTful CRUD API in springboot/index.md deleted file mode 100644 index bc36a6c95..000000000 --- a/blog/Building RESTful CRUD API in springboot/index.md +++ /dev/null @@ -1,575 +0,0 @@ ---- -title: "Building a RESTful CRUD API with Spring Boot: A step by step guide" -sidebar_label: Springboot-REST-API-CRUD -authors: [dharshibalasubramaniyam] -tags: [springboot, rest-api] -date: 2024-06-25 -hide_table_of_contents: true ---- - -In this article, we will learn how to build a RESTful CRUD (Create, Read, Update, Delete) API using Spring Boot. We will cover everything from project setup to testing, demonstrating best practices and essential techniques along the way. By the end of this tutorial, you will have a solid understanding of how to architect, develop, and test RESTful APIs using Spring Boot. - - - -## What is RESTFUL API? - -- In the realm of modern web development, RESTful APIs have become a cornerstone for building scalable, efficient, and maintainable web applications. - -- In the world of computers and the internet, applications communicate with each other using a set of rules. - -- RESTful APIs (Application Programming Interfaces) are act as intermediaries between different software applications (client and server), allowing them to communicate and share data with each other over the internet. - -- _Representational State Transfer (REST)_: This is a style of building software systems that use standard HTTP methods (like GET, POST, PUT, DELETE) to perform operations on resources (like data stored in a database). It emphasizes simplicity, scalability, and flexibility. - -- _API (Application Programming Interface)_: Think of an API as a set of rules and protocols that allow different software applications to talk to each other. It defines how different parts of software systems can interact and exchange data. - -- So, when we say a _“RESTful API”_, we’re talking about a set of rules and conventions that govern how applications communicate with each other over the internet using standard HTTP methods. - -## Why spring boot? - -- Among the myriad of frameworks available for building RESTful APIs, Spring Boot stands out as a robust and developer-friendly option for Java developers. - -- Spring Boot makes it simple for developers to create web applications without getting bogged down in complex configuration. - -- With Spring Boot, you can quickly build and deploy applications, which is great for trying out ideas or making changes fast. - -- It comes with many useful tools and features ready to use, like handling data, security, and more, saving you time and effort. - -- Spring Boot can easily connect with other tools and libraries, making it flexible for different needs. - Motive of this article - -- In this comprehensive guide, we’ll delve into the process of creating a RESTful CRUD (Create, Read, Update, Delete) API for managing user data using Spring Boot and MySQL. We’ll cover everything from project setup to testing, demonstrating best practices and essential techniques along the way. By the end of this tutorial, you’ll have a solid understanding of how to architect, develop RESTful APIs using Spring Boot. - -- Without further ado, let’s embark on this journey of building a RESTful user CRUD API with Spring Boot. - -### To build a Spring Boot project, you’ll need a few prerequisites: - -- Java Development Kit (JDK): Spring Boot applications are typically written in Java, so you’ll need to have the JDK installed on your system. Spring Boot supports Java 8 and newer versions, so make sure you have a compatible JDK installed. - -- Integrated Development Environment (IDE): While you can build Spring Boot applications using a simple text editor and command-line tools, using an IDE can greatly enhance your productivity. Popular choices include IntelliJ IDEA, Eclipse, and Spring Tool Suite (STS). - -- Build Tool: Spring Boot projects are typically built using either Maven or Gradle. Maven is more commonly used, but Gradle offers some advantages in terms of flexibility and performance. Choose whichever build tool you’re more comfortable with. - -- Understanding of Java: While you don’t need to be an expert, it’s beneficial to have a basic understanding of Java programming. - -- Database Knowledge (Optional): Having some knowledge of database concepts and SQL can be beneficial. Spring Boot supports various databases, including MySQL, PostgreSQL, MongoDB, and more. - -## Step 1: Setting up project. - -- Visit spring initializer and fill in all the details accordingly and at last click on the GENERATE button. Extract the zip file and import it into your IDE. - - ![img-03](./images/image01.png) - -### 1.1. Add below dependencies in pom.xml file. - -``` - - // we'll use this dependency to create RESTful API endpoints, - // handle HTTP requests (GET, POST, PUT, DELETE), and return JSON responses. - - org.springframework.boot - spring-boot-starter-web - - - // we'll use this dependency to interact with a database, - // define JPA entities (data models), perform CRUD operations, - // and execute custom database queries. - - org.springframework.boot - spring-boot-starter-data-jpa - - - // we'll use this dependency to establish a connection to - // our MySQL database, execute SQL queries, and manage database transactions. - - mysql - mysql-connector-java - 8.0.33 - runtime - - - // we'll use Lombok annotations (such as @Data, @Getter, @Setter) - // in our Java classes to automatically generate common methods, - // making your code cleaner and more concise. - - org.projectlombok - lombok - true - - - // we'll use this dependency to annotate your Java model classes - // with validation constraints (e.g., @NotBlank, @NotNull, @Size) - // and automatically validate request data in your RESTful API endpoints. - - org.springframework.boot - spring-boot-starter-validation - - - -``` - -### 1.2. Update application.properties file - -``` -spring.jpa.hibernate.ddl-auto=update -spring.datasource.url=jdbc:mysql://localhost:3306/usercrud -spring.datasource.username=your localhost username -spring.datasource.password=your localhost password -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -``` - -## Step 2: Create project structure. - -- Create below folder structure inside src folder. We’ll travel through each file one by one. - - ![img-03](./images/image02.png) - -## Step 3: Create User Model - -- Models define the structure and attributes of the data entities that the application manages. - -- For example, a User model might include attributes like id, username, email, and password. - -- Models often include annotations or custom logic to validate the data before it is persisted to the database. For example, you might use annotations like `@NotBlank`, `@Email`, or `@Size` to enforce constraints on the data. - -- Models are typically mapped to database tables using Object-Relational Mapping (ORM) frameworks like Hibernate in Spring Boot applications. They define the structure of the database tables and establish relationships between entities. - -```java -// User.java - -@Data -@AllArgsConstructor -@NoArgsConstructor -@Entity -@Table(uniqueConstraints = { - @UniqueConstraint(columnNames = "username"), - @UniqueConstraint(columnNames = "email") -}) -public class User { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @NotBlank - @Size(min=3, max = 20) - private String username; - - @NotBlank - @Email - private String email; - - @NotBlank - @Size(min=10, max = 10) - private String phone; - - private LocalDateTime regDateAndTime; - -} -``` - -## Step 4: Create DTO classes - -- DTOs (Data Transfer Objects) play a crucial role in Spring Boot CRUD applications by providing a flexible and efficient mechanism for transferring data between layers (Client and Server), optimizing performance, encapsulating business logic, ensuring compatibility, and enhancing security and privacy. - -```java -// ApiResponseDto.java - -@Data -@AllArgsConstructor -public class ApiResponseDto { - private String status; - private T response; - -} - -// ApiResponseStatus.java - -public enum ApiResponseStatus { - SUCCESS, - FAIL -} - -// UserRegistrationDTO.java - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class UserRegistrationDTO { - - @NotBlank(message = "Username is required!") - @Size(min= 3, message = "Username must have atleast 3 characters!") - @Size(max= 20, message = "Username can have have atmost 20 characters!") - private String userName; - - @Email(message = "Email is not in valid format!") - @NotBlank(message = "Email is required!") - private String email; - - @NotBlank(message = "Phone number is required!") - @Size(min = 10, max = 10, message = "Phone number must have 10 characters!") - @Pattern(regexp="^[0-9]*$", message = "Phone number must contain only digits") - private String phone; - -} -``` - -## Step 5: Create Exception classes - -- Custom exceptions help to improve the clarity and maintainability of the code by providing specific error handling for common scenarios encountered in a CRUD application. -- They allow developers to handle exceptional cases gracefully and communicate errors effectively. - -```java -// UserNotFoundException.java - -// This exception is thrown when attempting to retrieve a user from the database, but the user does not exist. -public class UserNotFoundException extends Exception{ - public UserNotFoundException(String message) { - super(message); - } -} - - -// UserAlreadyExistsException.java - -// This exception is thrown when attempting to create a new user, but a user with the same identifier (e.g., username, email) already exists in the database. -public class UserAlreadyExistsException extends Exception{ - public UserAlreadyExistsException(String message) { - super(message); - } -} - - -// UserServiceLogicException.java - -// This exception serves as a generic exception for any unexpected errors or business logic violations that occur within the user service layer. -public class UserServiceLogicException extends Exception{ - public UserServiceLogicException() { - super("Something went wrong. Please try again later!"); - } -} -``` - -## Step 6: Create User Repository Interface - -- Repository interfaces abstract the details of data access. Instead of directly interacting with data storage mechanisms (such as databases), you define repository interfaces to declare methods for common CRUD (Create, Read, Update, Delete) operations. - -- JpaRepository is a part of Spring Data JPA and provides CRUD (Create, Read, Update, Delete) operations for the User entity. - -- The first generic parameter User specifies the entity class that this repository manages, implying that User is an entity class. - -- The second generic parameter Integer specifies the type of the primary key of the User entity. - -```java -// UserRepository.java - -@Repository -public interface UserRepository extends JpaRepository { - - // Developers can define methods in repository interfaces with custom query keywords, - // and Spring Data JPA automatically translates them into appropriate SQL queries. - User findByEmail(String email); - - User findByUsername(String userName); - - List findAllByOrderByRegDateTimeDesc(); - -} -``` - -- By extending JpaRepository, UserRepository inherits methods for performing various database operations such as saving, deleting, finding, etc., without needing to write these methods explicitly. These methods are provided by Spring Data JPA based on the naming convention of the methods in the repository interface. - -## Step 7: Create User Service class - -- Service classes in Spring Boot CRUD applications serve as the backbone for implementing business logic, managing transactions, abstracting data access, centralizing business rules, promoting reusability, and handling errors effectively. - -- By placing business logic within service classes, you centralize the rules governing your application’s behavior. This makes it easier to maintain and modify the behavior of your application without having to hunt down logic scattered across different parts of the codebase. - -```java -@Service -public interface UserService { - - ResponseEntity> registerUser(UserDetailsRequestDto newUserDetails) - throws UserAlreadyExistsException, UserServiceLogicException; - - ResponseEntity> getAllUsers() - throws UserServiceLogicException; - - ResponseEntity> updateUser(UserDetailsRequestDto newUserDetails, int id) - throws UserNotFoundException, UserServiceLogicException; - - ResponseEntity> deleteUser(int id) - throws UserServiceLogicException, UserNotFoundException; - -} -``` - -```java -@Component -@Slf4j -public class UserServiceImpl implements UserService{ - - @Autowired - private UserRepository userRepository; - - @Override - public ResponseEntity> registerUser(UserDetailsRequestDto newUserDetails) - throws UserAlreadyExistsException, UserServiceLogicException { - - // logic to register user - } - - @Override - public ResponseEntity> getAllUsers() throws UserServiceLogicException { - // logic to get all users - } - - @Override - public ResponseEntity> updateUser(UserDetailsRequestDto newUserDetails, int id) - throws UserNotFoundException, UserServiceLogicException { - // logic to update user - } - - @Override - public ResponseEntity> deleteUser(int id) throws UserServiceLogicException, UserNotFoundException { - // logic to delete user - } -} -``` - -- Now let’s see how we can implement each of the methods in UserServiceImpl separately. - -```java -@Override -public ResponseEntity> registerUser(UserDetailsRequestDto newUserDetails) - throws UserAlreadyExistsException, UserServiceLogicException { - - try { - if (userRepository.findByEmail(newUserDetails.getEmail()) != null){ - throw new UserAlreadyExistsException("Registration failed: User already exists with email " newUserDetails.getEmail()); - } - if (userRepository.findByUsername(newUserDetails.getUserName()) != null){ - throw new UserAlreadyExistsException("Registration failed: User already exists with username " newUserDetails.getUserName()); - } - - User newUser = new User( - newUserDetails.getUserName(), newUserDetails.getEmail(), newUserDetails.getPhone(), LocalDateTime.no() - ); - - // save() is an in built method given by JpaRepository - userRepository.save(newUser); - - return ResponseEntity - .status(HttpStatus.CREATED) - .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), "New user account has been successfully created!")); - - }catch (UserAlreadyExistsException e) { - throw new UserAlreadyExistsException(e.getMessage()); - }catch (Exception e) { - log.error("Failed to create new user account: " + e.getMessage()); - throw new UserServiceLogicException(); - } -} -``` - -```java -@Override -public ResponseEntity> getAllUsers() throws UserServiceLogicException { - try { - List users = userRepository.findAllByOrderByRegDateTimeDesc(); - - return ResponseEntity - .status(HttpStatus.OK) - .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), users) - ); - - }catch (Exception e) { - log.error("Failed to fetch all users: " + e.getMessage()); - throw new UserServiceLogicException(); - } -} -``` - -```java -@Override -public ResponseEntity> updateUser(UserDetailsRequestDto newUserDetails, int id) - throws UserNotFoundException, UserServiceLogicException { - try { - User user = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("User not found with id " + id)); - - user.setEmail(newUserDetails.getEmail()); - user.setUsername(newUserDetails.getUserName()); - user.setPhone(newUserDetails.getPhone()); - - userRepository.save(user); - - return ResponseEntity - .status(HttpStatus.OK) - .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), "User account updated successfully!") - ); - - }catch(UserNotFoundException e){ - throw new UserNotFoundException(e.getMessage()); - }catch(Exception e) { - log.error("Failed to update user account: " + e.getMessage()); - throw new UserServiceLogicException(); - } - } -``` - -```java -@Override -public ResponseEntity> deleteUser(int id) throws UserServiceLogicException, UserNotFoundException { - try { - User user = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("User not found with id " + id)); - - userRepository.delete(user); - - return ResponseEntity - .status(HttpStatus.OK) - .body(new ApiResponseDto<>(ApiResponseStatus.SUCCESS.name(), "User account deleted successfully!") - ); - } catch (UserNotFoundException e) { - throw new UserNotFoundException(e.getMessage()); - } catch (Exception e) { - log.error("Failed to delete user account: " + e.getMessage()); - throw new UserServiceLogicException(); - } -} -``` - -:::note - -- The `@Service` annotation is used to indicate that a class is a service component in the Spring application context. - -- The `@Component` annotation is a generic stereotype annotation used to indicate that a class is a Spring component. Components annotated with @Component are candidates for auto-detection when using Spring's component scanning feature. - -- The `@Autowired` annotation is used to automatically inject dependencies into Spring-managed beans. When Spring encounters a bean annotated with @Autowired, it looks for other beans in the application context that match the type of the dependency and injects it. - -- The `@Slf4j` annotation is not a standard Spring annotation but rather a Lombok annotation used for logging. - ::: - -## Step 8: Create controller - -- A controller class in a Spring Boot application is responsible for handling incoming HTTP requests and returning appropriate HTTP responses. - -- It serves as an entry point for processing client requests and often delegates the actual business logic to service classes. - -- A controller class is typically annotated with @RestController or @Controller. - Inside the controller class, you define methods that handle specific HTTP requests. These methods are annotated with `@RequestMapping`, `@GetMapping`, `@PostMapping`, `@PutMapping`, `@DeleteMapping`, or other similar annotations to specify the HTTP method and the URL path that the method should respond to. - -- Each method in the controller class represents a particular endpoint of the REST API. - -- Controller classes often rely on service classes to perform business logic. Dependencies on these service classes are typically injected using the @Autowired annotation or constructor injection. - -- Controller methods return the response to the client. This can be done by returning a ResponseEntity object to have more control over the response status code, headers, and body. - -```java -@RestController -@RequestMapping("/users") -public class UserController { - - @Autowired - public UserService userService; - - @PostMapping("/new") - public ResponseEntity> registerUser(@Valid @RequestBody UserDetailsRequestDto userDetailsRequestDto) throws UserAlreadyExistsException, UserServiceLogicException { - return userService.registerUser(userDetailsRequestDto); - } - - @GetMapping("/get/all") - public ResponseEntity> getAllUsers() throws UserServiceLogicException { - return userService.getAllUsers(); - } - - @PutMapping("/update/{id}") - public ResponseEntity> updateUser(@Valid @RequestBody UserDetailsRequestDto userDetailsRequestDto, @PathVariable int id) - throws UserNotFoundException, UserServiceLogicException { - return userService.updateUser(userDetailsRequestDto, id); - } - - @DeleteMapping("/delete/{id}") - public ResponseEntity> deleteUser(@PathVariable int id) - throws UserNotFoundException, UserServiceLogicException { - return userService.deleteUser(id); - } - -} -``` - -:::note - -- The `@PathVariable` annotation is used to extract values from the URI template of the incoming request. E.g., updateUser method. - -- The `@RequestParam` annotation is used to extract query parameters from the URL of the incoming request. - -- The `@RequestBody` annotation is used to extract the request body of the incoming HTTP request. It binds the body of the request to a method parameter in a controller method, typically for POST, PUT, and PATCH requests. E.g., registerUser method. - ::: - -## Step 9: Create Exception Handler class - -- Exception handlers in Spring Boot applications are used to handle exceptions thrown during the processing of HTTP requests. - -- They allow you to centralize error handling logic and provide custom responses to clients when errors occur. - -- `@RestControllerAdvice` annotation is used to indicate that the class contains advice that applies to all controllers. This advice will be applied globally to handle exceptions thrown from any controller in the application. - -- To create an exception handler, you annotate a method within a controller class with @ExceptionHandler and specify the type(s) of exceptions it can handle. - -```java -// UserServiceExceptionHandler.java - -@RestControllerAdvice -public class UserServiceExceptionHandler { - - @ExceptionHandler(value = UserNotFoundException.class) - public ResponseEntity> UserNotFoundExceptionHandler(UserNotFoundException exception) { - return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ApiResponseDto<>(ApiResponseStatus.FAIL.name(), exception.getMessage())); - } - - @ExceptionHandler(value = UserAlreadyExistsException.class) - public ResponseEntity> UserAlreadyExistsExceptionHandler(UserAlreadyExistsException exception) { - return ResponseEntity.status(HttpStatus.CONFLICT).body(new ApiResponseDto<>(ApiResponseStatus.FAIL.name(), exception.getMessage())); - } - - @ExceptionHandler(value = UserServiceLogicException.class) - public ResponseEntity> UserServiceLogicExceptionHandler(UserServiceLogicException exception) { - return ResponseEntity.badRequest().body(new ApiResponseDto<>(ApiResponseStatus.FAIL.name(), exception.getMessage())); - } - - @ExceptionHandler(value = MethodArgumentNotValidException.class) - public ResponseEntity> MethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException exception) { - - List errorMessage = new ArrayList<>(); - - exception.getBindingResult().getFieldErrors().forEach(error -> { - errorMessage.add(error.getDefaultMessage()); - }); - return ResponseEntity.badRequest().body(new ApiResponseDto<>(ApiResponseStatus.FAIL.name(), errorMessage.toString())); - } - -} -``` - -## Step 10: Run your application and test with postman/frontend😊. - -Register user failed: User details invalid! - -![img-03](./images/image03.png) - -Register user successful - -![img-04](./images/image04.png) - -Retrieve all users - -![img-05](./images/image05.png) - -Update the details of John - -![img-06](./images/image06.png) - -Delete user john - -![img-07](./images/image07.png) - -Hey guys, that’s it. We have successfully developed rest crud API for a user management system. diff --git a/src/components/AdsComponent/index.tsx b/src/components/AdsComponent/index.tsx index a13256669..8659d469e 100644 --- a/src/components/AdsComponent/index.tsx +++ b/src/components/AdsComponent/index.tsx @@ -1,22 +1,34 @@ -import React from "react"; +import React, { useEffect } from "react"; import Head from "@docusaurus/Head"; const AdsComponent = () => { + useEffect(() => { + try { + (window.adsbygoogle = window.adsbygoogle || []).push({}); + } + catch (err) { + console.error(err); + } + }, []); return ( - -