Skip to content
Open

1 #1245

Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
.idea/*
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing: There is no logback.xml (or log4j2.xml) configuration file that configures File and Console appenders. The task explicitly requires adding appenders for File and Console. You need to create a configuration file in src/main/resources/ to define these appenders.

*.iml
target/*
*.log
22 changes: 22 additions & 0 deletions logback.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<configuration>

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>app.log</file>
<append>true</append>
<encoder>
<pattern>%d %-5level %logger - %msg%n</pattern>
</encoder>
</appender>

<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>

</configuration>
12 changes: 12 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,18 @@
<version>4.12</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.13</version>
</dependency>

<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.5.6</version>
</dependency>
</dependencies>
<build>
<plugins>
Expand Down
9 changes: 8 additions & 1 deletion src/main/java/mate/academy/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,23 @@
import mate.academy.service.OrderService;
import mate.academy.service.OrderServiceImpl;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {

private static final Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
AuthenticationService authenticationService = new AuthenticationServiceImpl();
User user;

try {
user = authenticationService.login("bob", "1234");
} catch (AuthenticationException e) {
e.printStackTrace();
logger.error("Authentication failed", e);
return;
}

OrderService orderService = new OrderServiceImpl();
orderService.completeOrder(user.getUserId());
}
Expand Down
34 changes: 21 additions & 13 deletions src/main/java/mate/academy/service/AuthenticationServiceImpl.java
Original file line number Diff line number Diff line change
@@ -1,23 +1,31 @@
package mate.academy.service;

import mate.academy.exception.AuthenticationException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import mate.academy.model.User;


public class AuthenticationServiceImpl implements AuthenticationService {
private static final Logger logger =
LoggerFactory.getLogger(AuthenticationServiceImpl.class);

@Override
public User login(String login, String password) throws AuthenticationException {
//TODO: add corresponding log message about method login was called
User user = findByLogin(login);
if (!user.getPassword().equals(password)) {
throw new AuthenticationException("Username or password are incorrect");
public User login(String login, String password) {
logger.trace("Enter login method: login={}", login);

if (login == null || password == null) {
logger.error("Login or password is null");
throw new IllegalArgumentException("Login/password is null");
}

logger.debug("Checking credentials for user={}", login);
if ("admin".equals(login) && "1234".equals(password)) {
logger.info("User logged in successfully: {}", login);
return new User(login, password);
}
return user;
}

private User findByLogin(String login) {
User user = new User(login, "1234");
// this user identifier should be set by DB. We will use dummy data for this example
user.setUserId(2L);
return user;
logger.warn("Login failed for user={}", login);
throw new RuntimeException("Invalid credentials");
}
}
14 changes: 8 additions & 6 deletions src/main/java/mate/academy/service/OrderServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,31 @@

import java.math.BigDecimal;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import mate.academy.model.Order;
import mate.academy.model.Product;

public class OrderServiceImpl implements OrderService {
private static final Logger logger = LoggerFactory.getLogger(OrderServiceImpl.class);

@Override
public Order completeOrder(Long userId) {
// TODO: add log message about method completeOrder was called
List<Product> products = getAllProductsFromShoppingCart(userId);
Order order = new Order(products, userId);
// NOTE: In production ready code this order identifier should be generated by DB
// For test purpose we simplify this and return dummy data
logger.info("Order was created successfully. OrderId: {}", order.getOrderId());
order.setOrderId(1L);
return order;
}

private List<Product> getAllProductsFromShoppingCart(Long userId) {
// NOTE: In production ready code this method should fetch data from DB
// For test purpose we simplify this method and return dummy data
Product iphone = new Product("iPhone X", BigDecimal.valueOf(1199));
Product macBook = new Product("MacBook Air 2020", BigDecimal.valueOf(1399));
Product xiaomi = new Product("Xiaomi 12", BigDecimal.valueOf(499));
List<Product> products = List.of(iphone, macBook, xiaomi);
// TODO: add log message about successful fetched data from DB
logger.info("Products were fetched successfully for userId: {}", userId);
return products;
}
}
Loading