🇺🇸 English
🇷🇺 Русский
🇺🇦 Українська
Голубая
Фиолетовая
Cветлая
Терминал
Norton
Войти
Используй промокод SUMMERUP - экономь на горячем, трать на холодное! 🍧 🍸 🍋 🍉 🍹
ПРОФЕССИОНАЛЬНЫЙ Full Stack Разработчик logo

Отзывы на курс "ПРОФЕССИОНАЛЬНЫЙ Full Stack Разработчик"

PROFESSIONAL Full Stack Developer

58 3
Информация Комментарии (66)
User Avatar
  • User Avatar
    shingis.zhansen
    Where can I get the textbook?
  • User Avatar
    CourseHunter Team shingis.zhansen
    In course materials
  • User Avatar
    mrrubox1
    tbh not the best course, a lot of things he is just reading from the docs and a person who is trying to learn cannot understand a shit from docs, they need much more simplified explanation. A lot about frond-end is VERY bad made he basically says "repeat after me" without explanation. You will still google A LOT just to understand things from this course cuz his explanations are just crap
  • User Avatar
    pyemkey mrrubox1
    What other course do you consider being better than this one?
  • User Avatar
    mrrubox1
    Lesson 318. WTF is promise. No explanation about it, NOTHING. Like we already know the concept of it. And lessons that comes after is just not understandable because he didnt exaplain what promise is.
  • User Avatar
    rawstyle mrrubox1
    Yeah it sucks, but if you still need explanation then check this out: https://javascript.info/async

  • User Avatar
    moonchildeverlasting rawstyle
    promises async is the cornerstone of development - i just means - do this and wait for that... or do this and dont wait for that.
  • User Avatar
    spuraigor
    Lessons 395 in deploy to aws a have error in react container exec format error wtf?
  • User Avatar
    lino479Nick spuraigor
    Have you found an answer ?
  • User Avatar
    lino479Nick spuraigor
    did you find an answer to that ?
  • User Avatar
    hazartilirot
    LESSON 619 GUUUUAAAAARRRRRRD!!!!!!!!

    https://github.com/amigoscode/full-stack-professional/issues/18
  • User Avatar
    hazartilirot
    Lesson 609

    I'm so angry with the new bloke... he just doesn't know how to explain things.... Actually, there is a chain of events you should know.....

    You may end up with the following error:

    ERROR TypeError: Cannot read properties of undefined (reading 'username') angular

    Basically, when you main page is load, it tries to get the object from those two lines

    [(ngModel)]="authenticationRequest.username"
    [(ngModel)]="authenticationRequest.password"

    the thing is my authenticationRequest - wasn't initialised and I constantly get the error.

    That is why he initialises the variable with the empty in LoginComponent

    object authenticationRequest: AuthenticationRequest = {};

    and that's why he uses optional operator in the both two fields in the AuthenticationRequest interface

    username?: string;
    password?: string;


    Gosh, I'm not a new to programming, but if he doesn't clear things up... it's hard to trace the error.... he just does things and you should figure out how it works and take everything for granted.
  • User Avatar
    hazartilirot
    Lesson 594

    The author uses the 15th version of PrimeNG whereas nowadays the 16th is available. I'm new to Angular so I cannot say exactly the difference between those versions however you don't need to use single quotes within the usual quotes. It won't work
    Here is how it should be:

    transitionOptions="300ms cubic-bezier(0, 0, 0.2, 1)"
  • User Avatar
    hazartilirot
    Lesson 571 Directives - conditions - Ngfor (Part 2) - missing code in the beginning

    https://github.com/amigoscode/full-stack-professional/issues/17
  • User Avatar
    hazartilirot
    Lesson 553 - I'm a bit perplexed. What do you mean we are going to create an backend application? How about Angular?
  • User Avatar
    hazartilirot
    Wow, I have just reached TYPESCRIPT section! Folks! Mama Samba is no longer in the videos! :D He is retired. :D
  • User Avatar
    hazartilirot
    Lesson 481, timeline 02:00

    Oh my gooooood. The more I watch the less I like.... he is soooooooo impatient and unreasonable. I have just implemented the feature of fetching a user by id. Instead of using the null in the initial state in AuthContext.jsx - I used a blank object as a kind of a guest with ROLE_GUEST.

    Each request I take the user's id from the localStorage, fetch the user from the database by the id and place the user into the state. Before that I retrieve user's email from JWT and compare - if they are the same - ok. If any of localStorage values have been removed from the client's side (jwt or user id) I redirect the user to the login page and delete any data in their localStorage.

    What he does in the Login component is he checks if the user is null (state). The difference is he doesn't fetch the user from the database (there is no async request) and it works. In my case, by the time it checks the user it is yet GIMMICK (guest! or it would've been null if I have done the same as he did). Anyway, what we actually need to check is not the user's state, but if the user is authenticated:

    const navigate = useNavigate();

    useEffect(() => {
    const token = localStorage.getItem("access_token");
    const id = localStorage.getItem("customer_id");

    if (token && id) {
    navigate("dashboard")
    }
    }, [])

    The whole story is written in his github:

    https://github.com/amigoscode/full-stack-professional/issues/16
  • User Avatar
    hazartilirot
    Lesson 480 timeline 03:50

    I'm so pissed off with the Mama Samba. First of all we haven't implemented a method fetching a user by email. Do we need to implement it? - No! Fetching a user by their emails isn't a good idea. When we create a database our primary key is customers ids. Meaning it would be the fastest way to fetch the user. Moreover we already have an implementation of fetching a user by the user's id.

    Come on! Mama Jambo! You could've done more than that!
  • User Avatar
    hazartilirot
    Lesson 475 timeline 02:45

    I am going to be a champion for opening new cases in his GitHub. :D

    https://github.com/amigoscode/full-stack-professional/issues/15
  • User Avatar
    hazartilirot
    Lesson 473 - this is exactly the case when you need to set a rule to our filter so that it won't block GET request on /api/v1/customers

    that's to say: WebSecurityConfiguration.java

    .requestMatchers(HttpMethod.GET, "/api/v1/customers")
    .permitAll()

    He signs in to his account, then is redirected to main page (dashboard), but in the end the backend part blocks the GET request and it doesn't show the user in the list.
  • User Avatar
    hazartilirot
    Lesson 470

    Why do you say we don't have the ability to create a new user within the UI ? Bloody hell, we have created a page which is available by the link http://localhost:5173/container

    It's the first page we have created utilising React. Take a rest from all your hard work mate, you're tired of recording.....
  • User Avatar
    hazartilirot
    LESSON 449 + 450 - It's hard to tell why I cannot pass the very first and basic test with bad credentials.... however I had to change BadCredentialException to more common exception. I debugged the app, there was a trace of InternalAuthenticationServiceException. Both exceptions implement AuthenticationServiceException so I decided to use it as a solution:

    I will leave the code in case you have the same issue:

    @ExceptionHandler(AuthenticationServiceException.class)
    public ResponseEntity handleException(
    AuthenticationServiceException e,
    HttpServletRequest request
    ) {
    return new ResponseEntity(
    new ApiError(
    request.getRequestURI(),
    e.getMessage(),
    HttpStatus.UNAUTHORIZED.value(),
    LocalDateTime.now()
    ),
    HttpStatus.UNAUTHORIZED
    );
    }
  • User Avatar
    hazartilirot
    LESSON 440 - It's not the only issue! The real problem is that if a clien'ts header includes Bearer with JWT token - we get 404 error, but if we make a GET request as an authenticated user - we get the 200th status. What the heck?
  • User Avatar
    hazartilirot hazartilirot
    Finally, he explains it in the 442-d lesson. Oh, dear......
  • User Avatar
    hazartilirot
    LESSON 421 - I think nobody realises how sick and tired I'm of the same expression he always uses - "this is pretty much it". He is just crazy... It drives me mad. :D
  • User Avatar
    hazartilirot
    Lesson 393 - Wow, the method with injecting ONE environment variable into .env file is just overwhelming! I bet there should be a better and simpler way to expose values of environment variables within the settings of our AWS instance.

    Let's say we may try to override the value of VITE_API_BASE_URL by exposing the variable with a specific value in Dockerrun.aws.json

    What he is showing in the lesson is just madness.
  • User Avatar
    hazartilirot hazartilirot
    This is exactly what he does in the next lesson, but he removes the entire section of environment variable for the frontend. **facepalm**
  • User Avatar
    hazartilirot
    Lesson 375 disable attribute in Button is no longer valid

    https://github.com/amigoscode/full-stack-professional/issues/13
  • User Avatar
    hazartilirot
    LESSON 362

    So if you follow my example written in lesson 113 - 116 (down below) relating to new BeanPropertyRowMapper(Customer.class),

    you need to change something. Just place getGender() and convert it to String.

    @Override
    public void insertCustomer(Customer customer) {

    var sql = "INSERT INTO customer(name, email, age, gender) VALUES (?, ?, ?, ?)";

    jdbcTemplate.update(
    sql,
    customer.getName(),
    customer.getEmail(),
    customer.getAge(),
    customer.getGender().toString()
    );
    }

    @Override
    public void updateCustomer(Customer customer) {

    var sql = """
    UPDATE customer
    SET (name, email, age, gender) = (?, ?, ?, ?)
    WHERE id = ?
    """;

    jdbcTemplate.update(
    sql,
    customer.getName(),
    customer.getEmail(),
    customer.getAge(),
    customer.getGender().toString(),
    customer.getId()
    );
    }
  • User Avatar
    hazartilirot
    LESSON 323 - Well, If I initially didn't know Javascript I would never pick the language up from his lessons. He barely scratched the surface.
  • User Avatar
    hazartilirot
    Lesson 284 - Don't listen to Mama Samba. Use CONST in most cases and seldom use LET if you need a variable to change. But you must never use VAR unless you know the difference.
  • User Avatar
    hazartilirot hazartilirot
    Finally, he explains the reason you must avoid using VAR in the 300th.
  • User Avatar
    hazartilirot
    Lesson 280. Bloody hell.... Why does he explain Javascript from scratch? On top of that he has switched Intellij IDEA to VS Code!!!!!!!!!!!!
  • User Avatar
    hazartilirot
    LESSON 261 - He seems to have forgotten to show how he retrieved DOCKERHUB_ACCESS_TOKEN and DOCKERHUB_USERNAME values from Docker or did I miss something? I think I didn't skip any lesson....
  • User Avatar
    lino479Nick hazartilirot
    1. Sign in to Docker Hub.
    2. Select your username in the top-right corner and from the drop-down menu select Account Settings.
    3. Select the Security tab and then New Access Token.

    (Hope it helps)
  • User Avatar
    hazartilirot
    LESSON 258 I personally had an issue with substituting the latest string with an environment variable. Here's what I suggest doing:

    https://github.com/amigoscode/full-stack-professional/issues/12

    I don't know what the difference is since I use MacOS as well as Mama Samba. However, mine is 13.3.1 Ventura. It must be the only difference.
  • User Avatar
    lino479Nick hazartilirot
    (I ssh-ed in the EC2 instance and ran this command)

    sed -i -E 's_(/:)([^"]*)_\1'${BUILD_NUMBER}'_' Dockerrun.aws.json

    !!! don't forget to replate & with your data !!!

  • User Avatar
    hazartilirot
    LESSON 252 - Before you type the Github Workflow schema select it at the bottom right corner of the Intellij IDEA. Literally select Schema and type Github workflow - it will helps you to autocomplete the parameters.

    As for his port at 03:40 - I didn't understand the issue.... how his local version of Postgres might interfere with the version of Postgres on Github (containerised)?
  • User Avatar
    hazartilirot
    "To be honest, this is (pretty much) it" - is the most used expression by Mama Samba))))))
  • User Avatar
    hazartilirot
    LESSON 236 ADD the line POSTGRES_DB: customer to compose.yml

    https://github.com/amigoscode/full-stack-professional/issues/11
  • User Avatar
    hazartilirot
    LESSON 204 - THE LUCKY ME! )

    https://github.com/amigoscode/full-stack-professional/issues/10
  • User Avatar
    george
    This course is a huge scam, it has no quality whatsoever. The practical project of the course is a joke, terrible, ugly, and poor. This guy is supported by fanboys who are infatuated with him. There are better options on Udemy. Anyone who says this course is good is blind, because this course is garbage. It's not worth my precious time with this crap, but thanks for bringing it up anyway, at least it prevents people from being tricked into buying this crap from this scammer.
  • User Avatar
    hazartilirot george
    Talking of quality what do you mean? Could you be more specific. He uses a decent microphone recording his video in full hd, his pronunciation is quite legible, he uses background when he appears in a flesh, he provides slides and documentations. He refers to the official docs. He wants to encompass the whole range of technologies. It is not about Spring Boot in particular.

    Yes, he has some irritating issues with scrolling frantically window up and down now and again, shaking the cursor like crazy....

    But it's just the way he explains things. Embrace his peculiarities. You may be surrounded by people at work who would make you feel even worse. All people are strange and complicated. We are all different.
  • User Avatar
    idk name george
    why??
  • User Avatar
    hazartilirot
    LESSON 200 (IT MIGHT BE CHANGED IN THE FUTURE)
    Configuring Jib plugin - the issue with mvn clean package

    https://github.com/amigoscode/full-stack-professional/issues/9

    You re going to encounter the issue. Mind I'm working with JDK 20. There is a chance yours is a former version;
  • User Avatar
    hazartilirot
    Lesson 138 Timeline 2:35

    https://github.com/amigoscode/full-stack-professional/issues/8


    That's really strange! We've got a block **@BeforeEach** setup.... why don't we place the piece of code into it?

    ```
    var customer = new Customer(
    FAKER.name().fullName(),
    FAKER.internet().safeEmailAddress(),
    new Random().nextInt(18, 99)
    );

    customerJDBCDataAccessServiceUnitTest.insertCustomer(customer);
    ```

    Why does he use the email address to find the customer we've just inserted? He basically relies on a method he hasn't tested yet. It's a shame!

    If the previous test is passed we mainly need to rely on it instead.


    ```
    @Test
    void selectCustomerById() {
    var customer1 = customerJDBCDataAccessServiceUnitTest.selectAllCustomers()
    .stream()
    .findAny()
    .orElseThrow();
    var customer2 = customerJDBCDataAccessServiceUnitTest.selectCustomerById(customer1.getId())
    .orElseThrow();
    assertThat(customer1.getId()).isEqualTo(customer2.getId());

    }
    ```
    We don't care what email our inserted user has.... All we care about is if there is a user at all. We get the user and then we test our method looking the user by its ID. Here is the code:

    ```
    @BeforeEach
    void setUp() {
    customerJDBCDataAccessServiceUnitTest = new CustomerJDBCDataAccessService(getJdbcTemplate());

    var customer = new Customer(
    FAKER.name().fullName(),
    FAKER.internet().safeEmailAddress(),
    new Random().nextInt(18, 99)
    );

    customerJDBCDataAccessServiceUnitTest.insertCustomer(customer);
    }

    @Test
    void selectAllCustomers() {

    var customers = customerJDBCDataAccessServiceUnitTest.selectAllCustomers();

    assertThat(customers).isNotEmpty();
    }

    @Test
    void selectCustomerById() {
    var customer1 = customerJDBCDataAccessServiceUnitTest.selectAllCustomers()
    .stream()
    .findAny()
    .orElseThrow();
    var customer2 = customerJDBCDataAccessServiceUnitTest.selectCustomerById(customer1.getId())
    .orElseThrow();
    assertThat(customer1.getId()).isEqualTo(customer2.getId());

    }
    ```


  • User Avatar
    hazartilirot
    Lesson 129

    export FORMAT="ID\t{{.ID}}\nNAME\t{{.Names}}\nIMAGE\t{{.Image}}\nPORTS\t{{.Ports}}\nCOMMAND\t{{.Command}}\nCREATED\t{{.CreatedAt}}\nSTATUS\t{{.Status}}\n"

    docker ps --format=$FORMAT


    BTW Before the129th lesson, don't use

    assertThat(postgreSQLContainer.isHealthy()).isTrue();

    it won't work with "postgres:latest". There should be a specific release supporting the feature.
  • User Avatar
    hazartilirot
    Lesson 119 He just wants me to die with frustration. What the fuck he is doing with the update method.

    updateCustomer has more unnecessary logic!

    Okay folks, I just share with you my implementation. What he does is just overkill.

    @Override
    public void updateCustomer(Customer customer) {
    var sql = """
    UPDATE customer
    SET (name, email, age) = (?, ?, ?)
    WHERE id = ?
    """;

    jdbcTemplate.update(
    sql,
    customer.getName(),
    customer.getEmail(),
    customer.getAge(),
    customer.getId()
    );
    }
  • User Avatar
    hazartilirot
    Lesson 116 - I have found it and it's much easier than the fuss you suggest with the RowMapper! Just use new BeanPropertyRowMapper(Customer.class) - and Bob's your uncle! :D

    @Override
    public Optional selectCustomerById(Integer customerId) {
    var sql = "SELECT * FROM customer c WHERE c.id = ?";


    return jdbcTemplate.query(
    sql,
    new BeanPropertyRowMapper(Customer.class),
    customerId
    ).stream().findAny();

    }
  • User Avatar
    hazartilirot
    Lesson 113 - OMG!

    My implementation is succinct:

    @Override
    public List selectAllCustomers() {
    var sql = "SELECT * FROM customer";

    return jdbcTemplate.query(sql, new BeanPropertyRowMapper(Customer.class));
    }

    and don't forget to inject the Postgres language into query. I don't know why he hasn't shown it yet.
  • User Avatar
    hazartilirot
    ?lesson=88

    Wow! The updateCustomer method is shown at 2:10 with a quite ridiculous implementation. Why do we need to overload the method with the logic? What's the point in all those conditions? If he had a choice between PUT and PATCH - yes, this logic would be justified, but for the PUT itself - it doesn't matter if there is a change in any object's field or it updates partially, let's say just the email or name.
    The code looks disgusting and verbose.
  • User Avatar
    barneymorris.us hazartilirot
    hi, can i contact you somehow directly?
  • User Avatar
    hazartilirot barneymorris.us
    Find me on Telegram. I use the same. nickname Don't forget to place AT before it.
  • User Avatar
    zapolski.shop hazartilirot
    i agree with you. Can you give a correct implementation?
  • User Avatar
    hazartilirot zapolski.shop
    Oh Christ! I've just realised I should've implemented Model Mapper for Dto to map an Entity and vice versa,.
  • User Avatar
    hazartilirot zapolski.shop
    As simple as that:

    PUT is a method of modifying resource where the client sends data that updates the entire resource .
    PATCH is a method of modifying resources where the client sends partial data that is to be updated without modifying the entire data.


    ````
    @PutMapping(
    path = "{customerId}",
    consumes = {
    MediaType.APPLICATION_JSON_VALUE,
    MediaType.APPLICATION_XML_VALUE
    }
    )
    public void updateCustomerById(
    @PathVariable("customerId") Integer customerId,
    @RequestBody CustomerDto customerDto
    ) {
    customerService.updateCustomerById(customerId, customerDto);
    }
    ````

    In the controller we use @PutMapping. PUT would update the entire resource regardless you change one field or all of them. Why bother putting any additional logic?

    ````
    public void updateCustomerById(Integer customerId, CustomerDto customerDto) {
    var customer = getCustomer(customerId);

    customer.setName(customerDto.name());
    customer.setEmail(customerDto.email());
    customer.setAge(customerDto.age());

    customerDao.updateCustomer(customer);
    }
    ````

    DONE!
  • User Avatar
    hazartilirot
    ?lesson=88 timeline 1:44

    public void updateCustomer(Customer customer) {
    customers.add(customer)
    }

    And how is the method going to override the actual object in the List if it simply adds a new object to the end of the List? That's really interesting.
  • User Avatar
    Anonymous
    Omg nigger teacher wtf
  • User Avatar
    hazartilirot Anonymous
    Mate, I've just passed the 67th lesson, the video is called Outro. Basically he appears in the episode and says that you can suck his black dick and lick his balls with your tongue. He told something about your white arse. He's going to smash your bitch up or something alike. Unfortunately I couldn't make it out. Anyway I was the first who watched it, I pay my debts. I have passed the information. Prepare yourself for the duty! :D
  • User Avatar
    Anonymous hazartilirot
    Wow wow untermensch, stay with your degenerated fantasies silent, now.
  • User Avatar
    Amstel Anonymous
    What a cretin, dumbstard
  • User Avatar
    oops Anonymous
    it's 2023, and people like you still exists(
  • User Avatar
    Amstel oops
    Not his fault. His brain is operating on Pentium II bro.
  • User Avatar
    Anonymous Amstel
    Lol, like niggers brain?
  • User Avatar
    Anonymous oops
    Google iq lefty,
  • User Avatar
    alex.pham2010
    good course
Команда внимательно читает ваши комментарии и оперативно на них реагирует. Вы можете спокойно оставлять запросы на обновления или задавать любые вопросы о курсе здесь.