Fakultas Ilmu Komputer UI

Skip to content
Snippets Groups Projects
Commit ffb3227c authored by Muhammad Rafif Elfazri's avatar Muhammad Rafif Elfazri
Browse files

Merge branch 'rafif-auth' into 'master'

Update README.MD

See merge request diskuy!69
parents c33cd26b 93821fac
No related branches found
No related tags found
1 merge request!69Update README.MD
# Diskuy
# Diskuy Backend
To start your Phoenix server:
## Tentang Aplikasi
* Install dependencies with `mix deps.get`
* Create and migrate your database with `mix ecto.setup`
* Start Phoenix endpoint with `mix phx.server`
Diskuy adalah sebuah aplikasi forum berbasis web. Thread-thread diskusi dengan topic yang bermacam-macam. Pengguna diwajibkan untuk mebuat akun apabila pengguna ingin mebuat topic, thread dan komen baru.
Now you can visit [`localhost:4000`](http://localhost:4000) from your browser.
Ready to run in production? Please [check our deployment guides](https://hexdocs.pm/phoenix/deployment.html).
## Learn more
## Penerapan Functional Programming
#### Pure Function
Pure Function adalah sebuah konsep dimana fungsi yang hanya bergantung pada argumen yang diberikan sehingga jika argumen yang sama diberikan, maka fungsi tersebut akan mengembalikan nilai yang sama dari sebelumnya. Fungsi ini tidak dipengaruhi oleh variabel-variabel di luar argumen dan tidak memutasi variabel apapun.
Contoh Penerapan:
https://gitlab.cs.ui.ac.id/functional-programming/diskuy/-/commit/c80fdf947fe00a75307436dbbc5c2f363b1adb8a#9218b17cba7ad37fdc17de1e228661cc4554b811
File yang highlight adalah guardian.ex dan fungsi yang saya highlight adalah fungsi validate_password yang menerima password dan encrypted_password. Fungsi ini hanya memeriksa apakah argumen password dan encrypted_password sama sehingga tidak membutuhkan variabel lain selain dua argumen dan fungsi tersebut konsisten memetakan dari argumen-argumen fungsi tersebut ke satu nilai.
#### Higher Order Function (Map) + Partially Applied Function + Pure FunctionHigher
Order function adalah sebuah konsep dimana sebuah fungsi menerima atau mengembalikan suatu fungsi. Higher order function yang saya gunakan adalah Map yang memetakan setiap elemen dari data enumerable ke dengan argumen fungsi yang diberikan.Argumen fungsi yang diberikan menggunakan konsep ke dalam fungsi map menggunakan partially applied function, yaitu sebuah fungsi yang saat diaplikasikan tidak memerlukan argumen penuh, fungsi tersebut dapat menerima secara terpisah.
Contoh penerapan:
https://gitlab.cs.ui.ac.id/functional-programming/diskuy/-/blob/master/diskuy_back/lib/diskuy/utility/utility.ex
Fungsi yang saya highlight dari file ini adalah fungsi capitalize_string yang menerima input text yang berupa string. Fungsi ini mengkapitalisasi setiap huruf pertama dari suatu kata dalam string tersebut. Fungsi tersebut menggunakan melakukan split pada text dengan dengan delimiter single white space yang menghasilkan **list of string** dan kemudian dengan hasil tersebut dimasukkan ke dalam fungsi Enum.map_join (Fungsi yang melakukan map dan melakukan konkantenasi elemen map dengan delimiter tertentu) sebagai argumen pertama, argumen kedua whitespace “ “, dan argumen ketiga fungsi String.capitalize/1 yang diubah menjadi partial function dengan & operator pada fungsi tersebut yang menyebabkan fungsi tidak perlu diaplikasikan dengan argumen penuh / dapat menunggu argumen. Fungsi ini juga merupakan pure function karena hanya membutuhkan argumen fungsi dan tidak mengubah variabel apapun.
#### Pattern Matching
Pattern Matching adalah sebuah konsep functional programming dimana kita dapat mendefinisikan fungsi dengan beberapa pattern argumen yang dimana setiap pattern argumen memiliki function body yang dapat memiliki behaviour yang berbeda satu sama lain.
Contoh Penerapan Pattern Matching:
https://gitlab.cs.ui.ac.id/functional-programming/diskuy/-/blob/master/diskuy_back/lib/diskuy_web/views/user_view.ex
Pattern matching yang dilakukan diatas adlah pattern matching pada pada argumen pertama dari fungsi render yang body dari functionnya memiliki behaviour yang berbeda-beda dalam men-serialize suatu struct menjadi JSON.
##### Pipe Operator
Pipe Operator adalah sebuah konsep dimana hasil dari suatu fungsi dapat diberikan ke fungsi yang lain yang dihubungkan dengan pipe operator. Pipe operator sangat mirip sekali dengan function composition, yang membedakannya urutan menjalankan fungsi. Pipe operator menjalankan fungsi dari yang pertama didefinisikan (dari kiri ke kanan) sedangkan function composition menjalankan fungsi dari yang terakhir didefinisikan (dari kanan ke kiri).
Contoh Penerapan Pipe Operator:
https://gitlab.cs.ui.ac.id/functional-programming/diskuy/-/blob/master/diskuy_back/lib/diskuy/account.ex
Lambang pipe operator pada programming language yang saya gunakan, elixir adalah “|>” dan Pipe operator pada elixir akan mengambil mengisi argumen pertama dari sebuah fungsi yang diteruskan menggunakan pipe operator.
Pipe operator tersebut akan ditulis menjadi user |> User.changeset(attrs) |> Repo.update() yang ekuivalen dengan Repo.update(User.changeset(user, attrs)). Dapat dilihat bahwa pipe operator membuat kode tersebut menjadi lebih readable
## Cara Menjalankan Aplikasi
Cara menyalakan server Phoenix untuk aplikasi ini :
* Install dependencies dengan `mix deps.get`
* Setup file ```config/dev.exs``` dan isi credential username dan password user pada database postgresql.
* Buat dan lakukan migrate pada database dengan `mix ecto.setup`
* Nyalakan server Phoenix dengan `mix phx.server`
Sekarang anda bisa mengakses [`localhost:4000`](http://localhost:4000) dari browser anda.
Sudah ready untuk dijalankan di production? Mohon [lihat deployment guide berikut ini](https://hexdocs.pm/phoenix/deployment.html).
## Pelajari lebih lanjut
* Official website: https://www.phoenixframework.org/
* Guides: https://hexdocs.pm/phoenix/overview.html
* Docs: https://hexdocs.pm/phoenix
* Forum: https://elixirforum.com/c/phoenix-forum
* Source: https://github.com/phoenixframework/phoenix
## Authors
Kelompok 18
* Fadhil Pradipta -
* Jonathan Chandra -
* Muhammad Rafif ELfazri- 1806205722
* Ryo Axton Lie -
## Acknowledgements
* CS UI - Functional Programming 2020
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment