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

Gagal Membuat Jadual Pengguna #18

Open
AbizarLeman opened this issue Sep 9, 2022 · 1 comment
Open

Gagal Membuat Jadual Pengguna #18

AbizarLeman opened this issue Sep 9, 2022 · 1 comment
Assignees
Labels
🐞 Pepijat Ada sesuatu yang tidak berfungsi dengan baik

Comments

@AbizarLeman
Copy link
Contributor

Berikut tangkapan layar ralat yang diperolehi ketika menjalankan pelayan:

image

Pangakalan data: MySQL

Langkah penghasilan semula ralat:

  1. Guna pangkalan data kosong (gugurkan semua jadual).
  2. Jalankan pelayan dengan poetry run python ./samudra/serve.py.

Andaian saya, isu ini berkaitan dengan skema MySQL.

Langkah penyelesaian sementara yang dibuat dalam fail samudra/models/auth/pengguna.py:

  1. Tukarkan lapangan peranan dalam kelas Keizinan dari peranan = TextField(null=False, unique=True) ke peranan = CharField(null=False, unique=True).
  2. Tukarkan lapangan peranan dalam kelas Pengguna dari peranan = ForeignKeyField(model=Keizinan, field=Keizinan.peranan, backref='pengguna', on_delete='set default', default=RoleEnum.DEFAULT.value) ke peranan = ForeignKeyField(model=Keizinan, field=Keizinan.peranan, backref='pengguna', default=RoleEnum.DEFAULT.value).

Jadual-jadual akan berjaya dibuat. Namun, timbul isu baru ketika mendaftar sebagai pengguna baru:

Insert Pengguna

Langkah penghasilan semula ralat:

  1. Buat panggilan API dengan laluan authentication/daftar
  2. Kandungan panggilan:
{
    "nama": "test@samudra.com",
    "katalaluan": "test123"
}
@Thaza-Kun Thaza-Kun added the 🐞 Pepijat Ada sesuatu yang tidak berfungsi dengan baik label Sep 23, 2022
@Thaza-Kun Thaza-Kun self-assigned this Sep 23, 2022
@Thaza-Kun
Copy link
Collaborator

Punca

Sejak a893b6d, saya tambah model Keizinan yang mewarisi BaseStrictTable. BaseStrictTable memastikan senarai data dalam jadual itu tidak ditambah sesuka hati (sebab keizinan hanya ada beberapa jenis sahaja, berbeza dengan jumlah pengguna yang boleh bertambah sebanyak-banyaknya), tetapi saya lupa memasukkan kaedah mengisi keizinan jadi apa-apa data yang bergantung kepada Keizinan akan gagal sebab tiada data keizinan.

# samudra/models/base.py
class BaseStrictTable(BaseTable):
    @classmethod
    def get_or_create(cls, **kwargs):
       # Saya matikan kaedah `get_or_create` untuk `BaseStrictTable`
        raise AttributeError(
            f"{cls} is a strict table. Rows can only be defined explicitly by the `Model.create` method.")
# samudra/models/auth/pengguna.py
class Keizinan(BaseStrictTable):
    peranan = TextField(null=False, unique=True)
    baca = BooleanField(null=False)
    ubah = BooleanField(null=False)
    tambah = BooleanField(null=False)
    buang = BooleanField(null=False)

Penyelesaian

Boleh lakukan salah satu dari dua ini atau kedua-duanya sekali:

  1. Tambah kaedah menambah data Keizinan melalui API
  2. Buat satu fungsi agar setiap kali pangkalan data dicipta, satu baris data Keizinan dengan nilai RoleEnum.DEFAULT akan diisi. Jadi, pengguna-pengguna baharu akan dapat nilai RoleEnum.DEFAULT.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐞 Pepijat Ada sesuatu yang tidak berfungsi dengan baik
Projects
None yet
Development

No branches or pull requests

2 participants