Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GBS-55 | Username Created #174

Merged
merged 8 commits into from
Oct 28, 2024
Merged

GBS-55 | Username Created #174

merged 8 commits into from
Oct 28, 2024

Conversation

MenekseYuncu
Copy link
Contributor

@MenekseYuncu MenekseYuncu commented Oct 25, 2024

Summary by CodeRabbit

  • Yeni Özellikler

    • Kullanıcı kayıt sürecine kullanıcı adı alanı eklendi ve bu alanda benzersizliği kontrol ediliyor.
    • Kullanıcı adı için özel doğrulama kuralları uygulandı.
    • Kullanıcı modeline yeni bir kullanıcı adı alanı eklendi.
    • Kullanıcı varlığını kontrol etmek için kullanıcı adı ile sorgulama yapılabilen yeni yöntemler eklendi.
    • Kullanıcı adı ile ilgili hata mesajları ve doğrulama kuralları geliştirildi.
  • Veritabanı Güncellemeleri

    • Kullanıcı tablosuna benzersiz ve boş olamaz kısıtlaması ile kullanıcı adı sütunu eklendi.
    • Kullanıcı kayıtları için yeni kullanıcı adı alanı ile birlikte veri ekleme işlemleri güncellendi.
    • Kullanıcı e-posta alanına benzersiz kısıtlama eklendi.

Copy link

coderabbitai bot commented Oct 25, 2024

Walkthrough

Bu değişiklikler, kullanıcı kaydı ve doğrulama süreçlerini geliştirmek amacıyla kullanıcı adını içeren yeni bir alan eklemeyi ve bununla ilişkili doğrulama mantığını içermektedir. RegisterRequest sınıfına yeni bir username alanı eklenmiş ve bu alan üzerinde boş olmaması gerektiğini belirten @NotBlank ve özel bir doğrulama anotasyonu olan @Username ile birlikte doğrulama kuralları uygulanmıştır. RegistrationServiceImpl sınıfında, kullanıcı kaydı sırasında girilen kullanıcı adının daha önce alınmış olup olmadığını kontrol eden bir mantık eklenmiş ve eğer kullanıcı adı mevcutsa UsernameAlreadyTakenException istisnası fırlatılmaktadır.

Ayrıca, Username adında yeni bir anotasyon ve UsernameValidator sınıfı tanımlanarak kullanıcı adı doğrulama mantığı geliştirilmiştir. Kullanıcı adı, User ve UserEntity sınıflarına yeni alanlar olarak eklenmiş ve UserReadPort ile UserRepository arayüzlerine kullanıcı adının varlığını kontrol eden yeni yöntemler eklenmiştir. Veritabanı şemasında ise gb_user tablosuna username sütunu eklenmiş ve kullanıcı verileri bu yeni alanla güncellenmiştir. Bu değişiklikler, kullanıcıların benzersiz bir kullanıcı adı ile kaydolmasını ve sistemdeki kullanıcı adlarının doğruluğunu sağlamayı amaçlamaktadır.


📜 Recent review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 6aaaee5 and 4c51f2d.

📒 Files selected for processing (1)
  • src/main/java/org/gelecekbilimde/scienceplatform/common/util/validation/UsernameValidator.java (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/main/java/org/gelecekbilimde/scienceplatform/common/util/validation/UsernameValidator.java

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 6

🧹 Outside diff range and nitpick comments (11)
src/main/java/org/gelecekbilimde/scienceplatform/user/port/UserReadPort.java (1)

15-15: Değişiklik onaylandı, dokümantasyon eklenebilir.

Kullanıcı adı kontrolü için eklenen metot uygun şekilde tasarlanmış. Ancak, metodun amacını ve kullanımını açıklayan bir Javadoc eklemek faydalı olabilir.

Aşağıdaki değişikliği öneriyorum:

+    /**
+     * Verilen kullanıcı adına sahip bir kullanıcının var olup olmadığını kontrol eder.
+     *
+     * @param username kontrol edilecek kullanıcı adı
+     * @return kullanıcı adı mevcutsa true, değilse false
+     */
     boolean existsByUsername(String username);
src/main/java/org/gelecekbilimde/scienceplatform/user/repository/UserRepository.java (1)

13-14: Kullanıcı adı kontrolü için eklenen metot onaylandı!

Metot imzası Spring Data JPA konvansiyonlarına uygun ve var olan existsByEmail metodu ile tutarlı bir şekilde implement edilmiş. Kullanıcı kaydı sırasında kullanıcı adı kontrolü için uygun bir çözüm.

Metot için Javadoc eklemek faydalı olabilir:

+    /**
+     * Verilen kullanıcı adının sistemde kayıtlı olup olmadığını kontrol eder.
+     *
+     * @param username kontrol edilecek kullanıcı adı
+     * @return kullanıcı adı mevcutsa true, değilse false
+     */
     boolean existsByUsername(String username);
src/main/java/org/gelecekbilimde/scienceplatform/user/exception/UsernameAlreadyTakenException.java (1)

1-16: Doğrulama ve test kapsamını genişletin.

Exception sınıfının işlevselliğini doğrulamak için unit test eklenmelidir.

Unit test sınıfını oluşturmak için yardımcı olmamı ister misiniz?

src/main/java/org/gelecekbilimde/scienceplatform/common/util/validation/Username.java (2)

1-14: Javadoc ekleyin ve doğrulama kurallarını belgeleyin.

Lütfen aşağıdaki bilgileri içeren bir Javadoc ekleyin:

  • Anotasyonun amacı
  • Doğrulama kuralları ve kısıtlamalar
  • Kullanım örnekleri
 package org.gelecekbilimde.scienceplatform.common.util.validation;

 import jakarta.validation.Constraint;
 import jakarta.validation.Payload;

 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;

+/**
+ * Kullanıcı adı alanlarının doğruluğunu kontrol eden doğrulama anotasyonu.
+ * 
+ * Doğrulama kuralları:
+ * - [Doğrulama kurallarını buraya ekleyin]
+ * 
+ * Örnek kullanım:
+ * <pre>
+ * public class RegisterRequest {
+ *     @Username
+ *     private String username;
+ * }
+ * </pre>
+ */
 @Target(value = ElementType.FIELD)
 @Retention(RetentionPolicy.RUNTIME)
 @Constraint(validatedBy = UsernameValidator.class)
 public @interface Username {

16-16: Hata mesajını yerelleştirin ve daha açıklayıcı yapın.

Varsayılan hata mesajı çok genel. Kullanıcıya daha spesifik geri bildirim sağlamak için messages.properties dosyasında yerelleştirilmiş bir mesaj kullanın.

-    String message() default "must be valid";
+    String message() default "{validation.constraints.username.message}";
src/main/java/org/gelecekbilimde/scienceplatform/common/util/validation/UsernameValidator.java (3)

7-9: Regex desenini sabit olarak tanımlama önerisi

Regex desenini private static final olarak tanımlamışsınız, bu iyi bir pratik. Ancak, bu desenin daha açıklayıcı bir şekilde dokümante edilmesi faydalı olacaktır.

Lütfen regex desenine bir Javadoc ekleyin:

+/**
+ * Kullanıcı adı için regex deseni:
+ * - Sadece alfanumerik karakterler (a-z, A-Z, 0-9)
+ * - Minimum 3, maksimum 20 karakter uzunluğunda
+ */
private static final String USERNAME_REGEX = "^[a-zA-Z0-9]{3,20}$";

26-31: Regex kontrolü ve hata mesajı iyileştirmesi

Regex kontrolü doğru yapılmış ancak hata mesajı daha açıklayıcı olabilir.

Hata mesajını Türkçe ve daha detaylı hale getirelim:

-context.buildConstraintViolationWithTemplate("Username must be 3-20 characters long and alphanumeric")
+context.buildConstraintViolationWithTemplate("Kullanıcı adı 3-20 karakter uzunluğunda olmalı ve sadece harf (a-z, A-Z) ve rakam (0-9) içermelidir")

1-35: Genel değerlendirme ve öneriler

Validator sınıfı genel olarak iyi tasarlanmış, ancak aşağıdaki iyileştirmeler düşünülebilir:

  1. Türkçe karakter desteği eklenebilir
  2. Özel karakterlere izin verilip verilmeyeceği netleştirilmeli
  3. Performans için regex pattern'ı compile edilebilir

Bu iyileştirmeleri implement etmek isterseniz yardımcı olabilirim. Ayrıca unit test yazımı konusunda da destek sağlayabilirim.

src/main/java/org/gelecekbilimde/scienceplatform/user/model/User.java (1)

40-40: Gereksiz boş satır tespit edildi.

Metotlar arasında tek bir boş satır yeterlidir.

    }

-
    public boolean isVerified() {
src/main/java/org/gelecekbilimde/scienceplatform/user/model/entity/UserEntity.java (1)

59-60: Performans optimizasyonu için index ekleyin.

Kullanıcı adı aramaları sık kullanılacağından, performansı artırmak için username alanına index eklenmesi önerilir. Bu, özellikle kullanıcı doğrulama ve arama işlemlerinde faydalı olacaktır.

Aşağıdaki değişikliği uygulayın:

-	@Column(name = "username")
+	@Column(name = "username")
+	@Index(name = "idx_user_username")
 	private String username;

İlgili import'u da eklemeyi unutmayın:

import jakarta.persistence.Index;
src/main/java/org/gelecekbilimde/scienceplatform/auth/service/impl/RegistrationServiceImpl.java (1)

52-54: Güvenlik loglaması eklenebilir.

Kullanıcı kaydı gibi önemli bir işlem için güvenlik ve hata ayıklama amaçlı loglama eklemek faydalı olacaktır. Özellikle:

  • Kullanıcı adı çakışması durumunda
  • Yeni kullanıcı oluşturulduğunda

Örnek implementasyon:

 if (userReadPort.existsByUsername(request.getUsername())) {
+    log.warn("Username already taken attempt: {}", request.getUsername());
     throw new UsernameAlreadyTakenException(request.getUsername());
 }
 User savedUser = userSavePort.save(user);
+log.info("New user registered with username: {}", user.getUsername());

Also applies to: 59-59

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 45b40b4 and 3cc6f04.

📒 Files selected for processing (12)
  • src/main/java/org/gelecekbilimde/scienceplatform/auth/model/request/RegisterRequest.java (2 hunks)
  • src/main/java/org/gelecekbilimde/scienceplatform/auth/service/impl/RegistrationServiceImpl.java (2 hunks)
  • src/main/java/org/gelecekbilimde/scienceplatform/common/util/validation/Username.java (1 hunks)
  • src/main/java/org/gelecekbilimde/scienceplatform/common/util/validation/UsernameValidator.java (1 hunks)
  • src/main/java/org/gelecekbilimde/scienceplatform/user/exception/UsernameAlreadyTakenException.java (1 hunks)
  • src/main/java/org/gelecekbilimde/scienceplatform/user/model/User.java (2 hunks)
  • src/main/java/org/gelecekbilimde/scienceplatform/user/model/entity/UserEntity.java (1 hunks)
  • src/main/java/org/gelecekbilimde/scienceplatform/user/port/UserReadPort.java (1 hunks)
  • src/main/java/org/gelecekbilimde/scienceplatform/user/port/adapter/UserAdapter.java (1 hunks)
  • src/main/java/org/gelecekbilimde/scienceplatform/user/repository/UserRepository.java (1 hunks)
  • src/main/resources/db/migration/V1__ddl.sql (1 hunks)
  • src/main/resources/db/migration/V2__dml.sql (1 hunks)
🔇 Additional comments (13)
src/main/java/org/gelecekbilimde/scienceplatform/user/exception/UsernameAlreadyTakenException.java (1)

7-10: LGTM!

Sınıf tanımlaması ve serileştirme uygulaması doğru şekilde yapılmış.

src/main/java/org/gelecekbilimde/scienceplatform/common/util/validation/Username.java (1)

13-13: UsernameValidator implementasyonunu doğrulayın.

UsernameValidator sınıfının varlığını ve doğru şekilde yapılandırıldığını kontrol edin.

✅ Verification successful

UsernameValidator doğru şekilde uygulanmış ve yapılandırılmış

UsernameValidator sınıfı:

  • ConstraintValidator<Username, String> arayüzünü düzgün şekilde uyguluyor
  • isValid() metodunu override ediyor
  • Kullanıcı adı doğrulaması için gerekli mantığı içeriyor:
    • 3-20 karakter uzunluğunda alfanümerik kontrol
    • Boşluk karakteri kontrolü
    • Uygun hata mesajları
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the existence and implementation of UsernameValidator

# Test 1: Check if UsernameValidator exists
echo "Checking for UsernameValidator..."
rg -l "class UsernameValidator"

# Test 2: Verify if it implements ConstraintValidator
echo "Verifying ConstraintValidator implementation..."
ast-grep --pattern 'class UsernameValidator implements ConstraintValidator<Username, String> {
  $$$
}'

Length of output: 4121

src/main/java/org/gelecekbilimde/scienceplatform/auth/model/request/RegisterRequest.java (2)

11-11: LGTM: Özel doğrulama için gerekli import eklenmiş.

@Username doğrulama anotasyonu için import doğru şekilde eklenmiş.


32-34: 🛠️ Refactor suggestion

Kullanıcı adı alanı için ek doğrulama önerileri.

Kullanıcı adı alanı için temel doğrulamalar eklenmiş ancak bazı ek kontroller düşünülebilir:

  1. Kullanıcı adı için maksimum uzunluk sınırı belirlenmeli
  2. Özel karakterler ve boşluk kullanımı kısıtlanmalı
 @NotBlank
+@Size(max = 30)
 @Username
 private String username;

Aşağıdaki komut ile mevcut username doğrulama kurallarını kontrol edelim:

src/main/java/org/gelecekbilimde/scienceplatform/common/util/validation/UsernameValidator.java (1)

13-15: Boş değer kontrolü güvenliği

StringUtils.hasText() kullanımı doğru bir yaklaşım, ancak bu noktada bir güvenlik açığı olabilir. Boş değerlerin geçerli kabul edilmesi, üst katmanlarda @NotBlank gibi bir doğrulama olmadığında sorun yaratabilir.

Üst katmanda @NotBlank kontrolünün varlığını doğrulamak için:

✅ Verification successful

Boş değer kontrolü güvenli durumda

RegisterRequest sınıfında username alanı için @NotBlank ve @Username validasyonları birlikte kullanılmış durumda. Bu nedenle boş değer kontrolü güvenlik açığı oluşturmamaktadır. UsernameValidator'daki boş değer kontrolü, custom validasyon kurallarının uygulanması öncesinde yapılan ek bir kontrol olarak değerlendirilebilir.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# RegisterRequest sınıfında username alanında @NotBlank kontrolü var mı?
rg -l 'class.*RegisterRequest' | xargs rg '@NotBlank.*username'

Length of output: 65


Script:

#!/bin/bash
# Önce RegisterRequest sınıfını içeren dosyayı bulalım
rg -l "class.*RegisterRequest"

# Ardından username alanı ile ilgili tüm doğrulamaları kontrol edelim
fd -e java | xargs rg -A 5 -B 5 "username.*RegisterRequest|RegisterRequest.*username"

# Ayrıca UsernameValidator'ın kullanıldığı yerleri kontrol edelim
rg "UsernameValidator"

Length of output: 539


Script:

#!/bin/bash
# RegisterRequest sınıfının içeriğini kontrol edelim
cat src/main/java/org/gelecekbilimde/scienceplatform/auth/model/request/RegisterRequest.java

# Username annotation'ın kullanıldığı yerleri kontrol edelim
rg "@Username"

# Username.java dosyasının içeriğini kontrol edelim
cat src/main/java/org/gelecekbilimde/scienceplatform/common/util/validation/Username.java

Length of output: 1998

src/main/java/org/gelecekbilimde/scienceplatform/user/model/User.java (1)

26-26: Username alanı eklenmesi onaylandı.

Kullanıcı modeline username alanının eklenmesi, PR hedefleriyle uyumlu ve doğru şekilde konumlandırılmış.

src/main/java/org/gelecekbilimde/scienceplatform/user/port/adapter/UserAdapter.java (1)

46-49: Uygulama onaylandı!

Yeni eklenen existsByUsername metodu, mevcut kod yapısına uygun şekilde implement edilmiş ve kullanıcı adı kontrolü için gerekli fonksiyonaliteyi sağlamaktadır.

Arayüz tanımlamasını doğrulamak için aşağıdaki komutu çalıştırın:

✅ Verification successful

Uygulama doğrulandı!

existsByUsername metodu, UserReadPort arayüzünde tanımlanmış ve UserAdapter sınıfında doğru şekilde implemente edilmiştir. Ayrıca, UserRepository arayüzünde de ilgili metot tanımı bulunmaktadır. Kod yapısı ve entegrasyon tam olarak beklendiği gibidir.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Açıklama: UserReadPort veya UserSavePort arayüzlerinde existsByUsername metodunun tanımlı olduğunu doğrula

# Test: Arayüz tanımlamalarını ara
rg "existsByUsername.*username" --type java

Length of output: 567

src/main/java/org/gelecekbilimde/scienceplatform/auth/service/impl/RegistrationServiceImpl.java (3)

15-15: İstisna import'u doğru eklenmiş.

Kullanıcı adı kontrolü için gerekli olan istisna sınıfı import edilmiş.


59-59: Builder zincirine username alanı doğru eklenmiş.

User nesnesinin oluşturulması sırasında username alanının eklenmesi uygun şekilde yapılmış.


52-54: Eşzamanlılık sorunu potansiyeli mevcut.

Kullanıcı adının benzersizlik kontrolü doğru implementte edilmiş, ancak kontrol ile kaydetme işlemi arasında bir yarış durumu (race condition) oluşabilir. Aynı kullanıcı adıyla eşzamanlı kayıt istekleri geldiğinde, her iki istek de kontrolü geçebilir.

Öneriler:

  1. Veritabanı seviyesinde unique constraint ekleyerek çift kontrol sağlanmalı
  2. Kullanıcı adı kontrolü ve kayıt işlemi için pessimistic locking kullanılabilir

Veritabanı kısıtlamasını kontrol edelim:

✅ Verification successful

Veritabanı seviyesinde koruma mevcut, race condition riski minimize edilmiş.

V1__ddl.sql dosyasında username alanı için unique constraint tanımlandığını görüyoruz:

username varchar(20) not null unique

Bu kısıtlama, eşzamanlı kayıt isteklerinde veritabanı seviyesinde koruma sağlayacaktır. Uygulama katmanındaki kontrol ve veritabanı kısıtlaması birlikte çalışarak güvenli bir implementasyon sunmaktadır.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if username column has unique constraint
rg -A 5 "username.*UNIQUE|UNIQUE.*username" 

Length of output: 45


Script:

#!/bin/bash
# Search for database schema files and migrations
fd -e sql -e xml -e yaml -e yml | xargs rg -i "username|unique"

# Search for JPA/Hibernate entity annotations related to username
ast-grep --pattern 'class $_ {
  $$$
  @$$$
  private String username;
  $$$
}'

# Search for repository layer implementations
rg -g "*.java" "@Table|@Column.*username" -A 5

Length of output: 14894

src/main/resources/db/migration/V1__ddl.sql (2)

50-50: Kullanıcı adı sütununun konumu uygun

Kullanıcı temel bilgileri (first_name, last_name) ile isteğe bağlı alanlar (avatar_path, biography) arasına yerleştirilmiş. Bu mantıklı bir düzenleme.


50-50: Kullanıcı adı sütunu için performans ve kullanılabilirlik önerileri

  1. Kullanıcı adı aramaları için bir indeks eklenmesi önerilir:
CREATE INDEX idx__gb_user__username ON gb_user (username);
  1. Büyük/küçük harf duyarlılığı için bir karar verilmeli:
  • Büyük/küçük harf duyarlı olması isteniyorsa mevcut yapı yeterli
  • Duyarsız olması isteniyorsa CITEXT tipine geçiş veya fonksiyonel indeks düşünülebilir
  1. 20 karakter sınırı bazı kullanıcılar için kısıtlayıcı olabilir. Bu sınırın seçilme nedeni dokümante edilmeli veya sınır genişletilmeli.

Kullanıcı adı uzunluğu kısıtlamasının etkisini analiz edelim:

✅ Verification successful

Kullanıcı adı sınırlaması ve doğrulama kontrolleri uygun şekilde yapılandırılmış

Yapılan inceleme sonucunda:

  1. Kullanıcı adı için 20 karakter sınırı, UsernameValidator sınıfında USERNAME_REGEX = "^[a-zA-Z0-9]{3,20}$" ile doğrulanıyor ve bu sınırlama:

    • Minimum 3, maksimum 20 karakter
    • Sadece alfanumerik karakterler
    • Özel karakterlere izin verilmiyor
    • Boşluk kontrolü mevcut
  2. Doğrulama mekanizması @Username özel anotasyonu ile sağlanıyor ve kayıt isteğinde (RegisterRequest) kullanılıyor.

  3. Veritabanı şemasındaki 20 karakter sınırı, uygulama katmanındaki doğrulama kurallarıyla tutarlı.

Önceki önerilerimden:

  • İndeks eklenmesi önerisi hala geçerli
  • Büyük/küçük harf duyarlılığı User sınıfında getUsername() metodu ile küçük harfe dönüştürülerek yönetiliyor
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Kullanıcı adı uzunluğu kontrollerini arayalım
rg -i "username.*length|length.*username" 

Length of output: 43


Script:

#!/bin/bash
# Let's search for username validation patterns in the codebase
rg -i "username.*valid|valid.*username" -A 3 -B 3

# Search for any username-related constants or configurations
rg -i "username.*max|max.*username" -A 3 -B 3

# Look for any validation annotations or constraints on username field
ast-grep --pattern 'class $_ {
  $$$
  @$_($$$username$$$)
  private String username;
  $$$
}'

# Check for any username validation in service or validator classes
fd -e java -e kt --exec grep -l -i "username" {} \; | xargs cat

Length of output: 22670

src/main/resources/db/migration/V2__dml.sql (1)

277-303: Veri bütünlüğünü doğrulayalım.

Rol ve kullanıcı ilişkilerinin doğru kurulduğundan emin olalım.

✅ Verification successful

Let me verify the role IDs in the user inserts to ensure they match with the role definitions.


Rol ve kullanıcı ilişkileri doğrulandı

Rol ve kullanıcı kayıtları arasındaki ilişkiler doğru kurulmuş:

Her kullanıcı için rol atamaları email adresleri ve kullanıcı tipleriyle tutarlı şekilde yapılmış.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Açıklama: Rol ID'lerinin ve ilişkilerin doğruluğunu kontrol et

# Test: Rol ID'lerinin gb_role ve gb_user tablolarında tutarlı olduğunu doğrula
rg -A 1 "insert into gb_role \(id" 
rg "role_id, created_by" 

Length of output: 1471


Script:

#!/bin/bash
# Get the user inserts with role IDs to compare with role definitions
rg "values \('.*?', current_date.*?role_id" src/main/resources/db/migration/V2__dml.sql

Length of output: 95


Script:

#!/bin/bash
# Let's try a simpler pattern to get user inserts
rg -A 2 "insert into gb_user" src/main/resources/db/migration/V2__dml.sql

Length of output: 1076


Script:

#!/bin/bash
# Get complete user inserts to see role_id values
rg -A 4 "insert into gb_user" src/main/resources/db/migration/V2__dml.sql

Length of output: 1614

alpemreelmas
alpemreelmas previously approved these changes Oct 25, 2024
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Outside diff range and nitpick comments (1)
src/main/resources/db/migration/V2__dml.sql (1)

277-303: Kullanıcı adı standartları belirlenmeli.

Kullanıcı adları için:

  • Minimum/maksimum uzunluk
  • İzin verilen karakterler
  • Büyük/küçük harf kullanımı
  • Özel karakter kullanımı
    gibi kurallar belirlenmelidir.
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 223d60a and 346f64c.

📒 Files selected for processing (6)
  • src/main/java/org/gelecekbilimde/scienceplatform/auth/model/request/RegisterRequest.java (2 hunks)
  • src/main/java/org/gelecekbilimde/scienceplatform/auth/service/impl/RegistrationServiceImpl.java (2 hunks)
  • src/main/java/org/gelecekbilimde/scienceplatform/common/util/validation/UsernameValidator.java (1 hunks)
  • src/main/java/org/gelecekbilimde/scienceplatform/user/model/User.java (1 hunks)
  • src/main/resources/db/migration/V1__ddl.sql (1 hunks)
  • src/main/resources/db/migration/V2__dml.sql (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (5)
  • src/main/java/org/gelecekbilimde/scienceplatform/auth/model/request/RegisterRequest.java
  • src/main/java/org/gelecekbilimde/scienceplatform/auth/service/impl/RegistrationServiceImpl.java
  • src/main/java/org/gelecekbilimde/scienceplatform/common/util/validation/UsernameValidator.java
  • src/main/java/org/gelecekbilimde/scienceplatform/user/model/User.java
  • src/main/resources/db/migration/V1__ddl.sql
🔇 Additional comments (1)
src/main/resources/db/migration/V2__dml.sql (1)

277-303: Veritabanı şeması doğrulaması gerekli.

Yeni eklenen username alanı için:

  • Unique index
  • Not null constraint
  • Karakter seti ve collation
    kontrolleri yapılmalıdır.
✅ Verification successful

Username alanı için gerekli kontroller tamamlandı

V1__ddl.sql dosyasında username alanı için gerekli tüm kontroller mevcut:

  • not null constraint tanımlanmış
  • unique constraint tanımlanmış
  • varchar(20) olarak karakter seti ve uzunluk sınırlaması yapılmış

Veritabanı şeması doğru şekilde yapılandırılmış durumda, ek bir işlem gerekmiyor.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Username alanı için constraint ve index kontrolü
rg -A 5 "alter table.*gb_user|create.*index.*username|add constraint.*username"

Length of output: 81


Script:

#!/bin/bash
# V2 öncesi migration dosyalarını kontrol et
fd "V[0-9]+__.*\.sql" src/main/resources/db/migration | sort | while read -r file; do
    echo "=== $file ==="
    cat "$file" | grep -i "gb_user\|username"
done

Length of output: 2522


Script:

#!/bin/bash
# gb_user tablosunun yapısını kontrol et
fd "V[0-9]+__.*\.sql" src/main/resources/db/migration | sort | while read -r file; do
    echo "=== $file ==="
    cat "$file" | grep -A 10 "create table.*gb_user"
done

Length of output: 1752


Script:

#!/bin/bash
# Index ve constraint tanımlamalarını kontrol et
fd "V[0-9]+__.*\.sql" src/main/resources/db/migration | sort | while read -r file; do
    echo "=== $file ==="
    cat "$file" | grep -i "index\|constraint\|unique\|not null" | grep -i "username\|gb_user"
done

Length of output: 2113

src/main/resources/db/migration/V2__dml.sql Outdated Show resolved Hide resolved
src/main/resources/db/migration/V2__dml.sql Outdated Show resolved Hide resolved
@MenekseYuncu MenekseYuncu merged commit c9e49b7 into main Oct 28, 2024
3 checks passed
@MenekseYuncu MenekseYuncu deleted the GBS-55/username-create branch October 28, 2024 04:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants