แพ็คเกจนี้มีวัตถุประสงค์เพื่อเป็นเทมเพลตเริ่มต้นที่ทันสมัยระดับการผลิตรวมแบตเตอรี่สำหรับการเขียนเว็บเซิร์ฟเวอร์กับ Haskell บน Backend และ Elm ใน Frontend มันเป็นไปตามเค้กสามชั้น รูปแบบสถาปัตยกรรม
ห้องสมุด Haskell ที่ใช้ในที่นี่:
relude : โหมโรงทางเลือก; ที่นี่ใช้เคล็ดลับ base-nopreludeco-log : ห้องสมุดการบันทึก conconadic conconariantpostgresql-simple : ไลบรารีไคลเอนต์ PostgreSQL ระดับกลางสำหรับการโต้ตอบฐานข้อมูลservant : ครอบครัวของห้องสมุดสำหรับการกำหนด WebServices REST API ในระดับประเภทelm-street : สะพานเชื่อมระหว่าง Elm และ Haskell - การสร้างชนิดข้อมูล ELM, encoders JSON และตัวถอดรหัสโดยอัตโนมัติจากประเภท Haskellproto-lens : ข้อความ protobuf สำหรับการรวมเข้ากับแอปพลิเคชันมือถือekg : การตรวจสอบประสิทธิภาพของแอปพลิเคชันbcrypt : ฟังก์ชั่นการแฮชรหัสผ่านjwt : การรับรองความถูกต้องของผู้ใช้ผ่าน JWThspec และ hedgehog : การทดสอบไลบรารี ส่วนนี้มีคำอธิบายโดยละเอียดเพิ่มเติมเกี่ยวกับสถาปัตยกรรมที่เลือกและการใช้งานโดยเฉพาะของเรา
ประเภทข้อมูลสำหรับสภาพแวดล้อมรันไทม์สำหรับแอปพลิเคชันทั้งหมดถูกกำหนดไว้ในโมดูล Lib/App/Env.hs มันมีฟิลด์ต่าง ๆ ที่จำเป็นสำหรับการประมวลผลแอปพลิเคชันเช่นพูลฐานข้อมูล, JWT Secret, Logger ฯลฯ นอกจากนี้ยังมีอินสแตนซ์ของ Custom Has typeclass ซึ่งบอกวิธีแยกส่วนต่าง ๆ ของแอปพลิเคชัน สิ่งนี้ทำเพื่อให้บรรลุวัตถุประสงค์ต่อไปนี้:
การเริ่มต้นสภาพแวดล้อมกำลังเกิดขึ้นในโมดูล Lib.hs
โมดูล Lib/App/Error.hs มีรายการที่ละเอียดถี่ถ้วนของข้อผิดพลาดทั้งหมดที่แอปพลิเคชันสามารถโยนได้ โมดูลนี้ให้เลเยอร์ที่สะดวกระหว่างชื่อข้อผิดพลาดที่มนุษย์อ่านได้และรหัสข้อผิดพลาด HTTP นอกจากนี้ยังมียูทิลิตี้ที่มีประโยชน์สำหรับการขว้างข้อผิดพลาดและสำหรับการจัดรูปแบบ CallStack ของข้อผิดพลาด
แอปพลิเคชันหลัก Monad สามารถพบได้ในโมดูล Lib/App/Monad.hs
เทมเพลตนี้ใช้ฐานข้อมูล PostgreSQL และมีตัวช่วยห่อหุ้มฟังก์ชั่นจากไลบรารี postgresql-simple เพื่อรวมเข้ากับ Monad ของเราเอง ดู Lib/Db/Functions.hs สำหรับรายละเอียดเพิ่มเติม
ควรเพิ่มเอฟเฟกต์ใหม่ทั้งหมด (เช่นการส่งอีเมลการจัดเก็บไฟล์ ฯลฯ ) ควรเพิ่มลงใน Lib/Effects/ Directory