GithubHelp home page GithubHelp logo

hassanhabib / otriples Goto Github PK

View Code? Open in Web Editor NEW
320.0 320.0 165.0 7.89 MB

This is an open source schooling system, dedicated to provide a better experience for schools needing a management and communication and tutoring system all in one place. This project is aiming toward directing all the software development funds and hours to families in need, the idea of the project is to allow schools to use the system as long as the software funds in the school are directed towards financially disadvantaged families and students.

C# 100.00%
api dotnetcore families funds schooling students

otriples's Introduction

OtripleS

Open Source Schooling System

.NET The Standard - COMPLIANT The Standard The Standard Community

Introduction

This is an open source schooling system, dedicated to provide a better experience for schools needing a management and communication and tutoring system all in one place. This project is aiming toward directing all the software development funds and hours to families in need, the idea of the project is to allow schools to use the system as long as the software funds in the school are directed towards financially disadvantaged families and students.

Project Coding Standards

The Standard

C# Coding Standard

Standard-Compliance

This library was built according to The Standard. The library follows engineering principles, patterns and tooling as recommended by The Standard.

This library is also a community effort which involved many nights of pair-programming, test-driven development and in-depth exploration research and design discussions.

Project Updates

OtripleS 001: Project Init & Student Model Conceptualization

OtripleS 002: Student CRUD Operations

OtripleS 003: Modifying Student Object End-to-End

OtripleS 004: Get All Teachers Acceptance Tests & Course Model

OtripleS 005: Classroom & Assignments

OtripleS 006: Building References and Relationships

OtripleS 007: Upgrading to .NET 5.0 RC

OtripleS 008: Upgrading to .NET 6.0 Preview 3

otriples's People

Contributors

agentender avatar arafat-pro avatar bbereket1 avatar bilalmehrban avatar deepshri7 avatar devanteconnor avatar devmanzur avatar elbekdeveloper avatar emmicourt avatar eriadhami avatar evangelinedrink avatar evannlim avatar gauriramesh avatar glhays avatar hassanhabib avatar hatemgamal avatar imjane5 avatar j-bedford avatar kfitz114 avatar mehdi-aghaei avatar noahmahi2019 avatar rcruzfreelance avatar sallydeveloper avatar shrihumrudha avatar syedib avatar tajwal avatar tharaniannamalai avatar tobidub avatar viralpandya avatar zionlloyd05 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

otriples's Issues

CODE RUB - Retrieve All

Hi everyone,
This week, I need everyone to remove any exception handling and their tests for any retrieve all methods that tries to handle DbUpdateException - all the possible exceptions that EF throws are just SqlException in this case - there's absolutely no way you would get a DbUpdateException when you do a RetrieveAll.

Please hit like on this post so I can assign next weeks tasks as well, thank you all.

Student Attachments

This week we will be setting up attachment to a student profile, a simple many to many relationship to attach the two entities:

public class StudentAttachment
{
    public Guid studentId {get; set;}
    public Guid attachmentId {get; set;}
    public Guid Notes {get; set;}
}

Discuss Contact Model

Hi everyone,
In this issue, we want to discuss a contact model, a contact model could be for student, teacher, admin, guardian or any other person entity on the system, here's a draft:

public class Contact: IAuditable
    {
        public Guid Id { get; set; }
        public bool IsPrimary {get; set;}
        public ContactType Type {get; set;}
        public string Information {get; set;}
        public DateTimeOffset CreatedDate { get; set; }
        public DateTimeOffset UpdatedDate { get; set; }
        public Guid CreatedBy { get; set; }
        public Guid UpdatedBy { get; set; }
    }

public enum ContactType {
    Email,
    Phone,
    Other
}

issue With studentSemasterCourseId

@hassanhabib

actually we don't have studentSemasterCourseId in StudentSemasterCourse Table, We are using studentSemasterCourseId to fetch a single record in StudentSemasterCourse broker so in order to fetch single record we suppose to use StudentId and SemesterCourseId together, am I correct?

image

image

Discuss Teacher Model

Hi everyone,
This week we want to discuss the Teacher model - here's an initial concept:

public class Teacher : IAuditable
{
        public Guid Id { get; set; }
        public string UserId { get; set; }
        public string EmployeeNumber { get; set; }
        public string FirstName { get; set; }
        public string MiddleName { get; set; }
        public string LastName { get; set; }
        public DateTimeOffset BirthDate { get; set; }
        public Gender Gender { get; set; }
        public DateTimeOffset CreatedDate { get; set; }
        public Guid CreatedBy { get; set; }
        public DateTimeOffset UpdatedDate { get; set; }
        public Guid UpdatedBy { get; set; }
}

There's one thing here to consider:
The teacher model seems almost identical to the Student model, can you think of any additional properties that a teacher model should have that a student wouldn't?

Discuss Semester Course Model

Per @a-urel suggestion - this model is a sub entity off of the Course model and it's very specific to a particular semester, teacher and a course as follows:

public class SemesterCourse
{
    public Guid Id { get; set; }
    public Guid CourseId {get; set;}
    public Course Course { get; set; }
    public Guid TeacherId {get; set;}
    public Teacher Teacher { get; set; }
    public Guid ClassroomId {get; set;}
    public Classroom Classroom { get; set; }
    public SemesterCourseStatus Status { get; set; }
}

public enum SemesterCourseStatus
{
    Draft,
    Active,
    Canceled,
    Closed
}

Let's discuss the details.

Discuss the Exam Model

In this issue we will discuss the Exam model.

here's a draft idea of a model:

public class Exam : IAuditable
    {
        public Guid Id { get; set; }
        public string Content { get; set; }

        public Guid SemesterCourseId{ get; set; }
        public SemesterCourse SemesterCourse { get; set; }

        public Guid TeacherId { get; set; }
        public Teacher Teacher { get; set; }

        public DateTimeOffset CreatedDate { get; set; }
        public DateTimeOffset UpdatedDate { get; set; }
        public Guid CreatedBy { get; set; }
        public Guid UpdatedBy { get; set; }
    }

We need to think about the exam content, questions and notes.
There will be additional entities where we attach a student to an exam, or maybe simply through student semester courses - let me know your thoughts.

Student Contact

This upcoming sprint we will be discussing attaching contact entities to a student entity.
Ideally, a contact entity and a student entity should have a middle entity in between to allow the following:

  1. Having multiple contacts for one student.
  2. younger students with the same contact information (usually it's just the parents phones).
    So this is very likely a many-to-many relationship.
    by the time this Sprint is over, I would have successfully upgraded to .NET 5 RC, which comes with EF 5 that offers an out of box many-to-many relationship builder without needing to design a glue entity, check some more information here:
    https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-5.0/whatsnew#many-to-many

We might not necessarily need that for our business case here, but it's definitely something to consider.
Traditionally, a glue entity would look something like this:

public class StudentContact {
    public Guid contactId {get; set;}
    public Guid studentId {get; set;}
}

Let's discuss.

Discuss User Model

We want to build a User Model to allow tracking the created by and updated by Ids on the system, here's an initial model to work with:

public class User : IAuditable {
    public Guid Id {get; set;}
    public string Name {get; set;}
    public UserStatus Status {get; set;}
    public DateTimeOffset CreatedDate {get; set;}
    public DateTimeOffset UpdatedDate {get; set;}
}


public enum UserStatus {
    Activated,
    Deactivated
}

CODE RUB Week 02

Please take this week as an opportunity to do code rubs on our code base - thank you all.

Discuss Classroom Model

Hi everyone!
In this issue, we will be discussing the Classroom model, here's a draft model for discussion:

using System;
					
public class Classroom {
	public Guid Id {get; set;}
	public string Name {get; set;}
	public string Location {get; set;}
	public ClassroomStatus Status {get; set;}
	public DateTimeOffset CreatedDate {get; set;}
	public DateTimeOffset UpdatedDate {get; set;}
	public Guid CreatedBy {get; set;}
	public Guid UpdatedBy {get; set;}
}

public enum ClassroomStatus {
	Active,
	Inactive
}

I think there's much more to add to a classroom than just the aforementioned, I'm also not sure the current statuses are inclusive - let's discuss :)

Course Attachment

public class CourseAttachment
{
    public Guid CourseId {get; set;}
    public Guid AttachmentId {get; set;}
    public Guid Notes {get; set;}
}

Hit the like button on this post if you'd like to be a part of developing this feature

Discuss Architecture Patterns

This issue is a thread to discuss potential patterns that we could adapt in OtripleS to streamline the development of the project, the current pattern follows the Models, Brokers, Services, Controllers and Views pattern, you can learn more about the pattern in the following sessions:
Fundamentals of Building ASP.NET Core Applications
Fundamentals of Building ASP.NET Core Applications (Brokers)
Fundamentals of Building ASP.NET Core Applications (Brokers & Services)
Architecting Industrial Software - Services Deep Dive
Exception Handling Noise in C#

Some of the contributors on this project have proposed some patterns like MediatR and some others had concerns about exception handling - this is the thread to discuss all these ideas and dive into their details.
This issue should not be a blocker for the current or future work until the team reaches a decision about which pattern we need to follow, it's never too late because eventually the current monolith we are building should dissolve into microservices this is the current mindset behind how we are building what we are building - building a monolith with microservices mindset.

Guardian Attachment

This week we will be setting up attachment to a guardian attachments, a simple many to many relationship to attach the two entities:

public class GuardianAttachment
{
    public Guid GuardianId {get; set;}
    public Guid AttachmentId {get; set;}
    public Guid Notes {get; set;}
}

Discuss Attendance Model

Hi Everyone,
In this issue, we will discuss the Student Attendance model, here's a draft model:

public class Attendance {
    public Guid Id {get; set;}
    public Guid StudentSemesterCourseId {get; set;}
    public DateTimeOffset AttendanceDate {get; set;}
}

Exam Attachments

Thank you all for your contributions, here's an overview of our ExamAttachment entity model this week:

public class ExamAttachment {
    public Guid ExamId {get; set;}
    public Exam Exam {get; set;}
    public Guid AttachmentId {get; set;}
    public Attachment Attachment {get; set;}
    public string Notes {get; set;}
}

Now, let's talk about ExamAttachments:

Setup

  • ExamAttachment Model Setup & Migrations with EF Core @bilalmehrban Tuesday 12:00 AM - 11:59 PM PST

Broker

  • ExamAttachment Broker Select By Id function @bilalmehrban by Tuesday 12:00 AM - 11:59 PM PST
  • ExamAttachment Broker Select All function @bilalmehrban by Tuesday 12:00 AM - 11:59 PM PST
  • ExamAttachment Broker Insert function @bilalmehrban by Tuesday 12:00 AM - 11:59 PM PST
  • ExamAttachment Broker Delete function @bilalmehrban by Tuesday 12:00 AM - 11:59 PM PST

Service

  • ExamAttachment Service Add function @eriadhami by Wednesday 12:00 AM - 11:59 PM PST
  • ExamAttachment Service Retrieve by Id function @viralpandya by Wednesday 12:00 AM - 11:59 PM PST
  • ExamAttachment Service Retrieve All function @stasnowak by Wednesday 12:00 AM - 11:59 PM PST
  • ExamAttachment Service Delete by Id function @ZionLloyd05 by Wednesday 12:00 AM - 11:59 PM PST

Controller

  • ExamAttachment Controller Post endpoint @viralpandya by Thursday 12:00 AM - 11:59 PM PST
  • ExamAttachment Controller Get by Id endpoint @viralpandya by Thursday 12:00 AM - 11:59 PM PST
  • ExamAttachment Controller Get All endpoint @viralpandya by Thursday 12:00 AM - 11:59 PM PST
  • ExamAttachment Controller Delete endpoint @viralpandya by Thursday 12:00 AM - 11:59 PM PST

Acceptance Tests

  • ExamAttachment Post Acceptance Test @viralpandya by Friday 12:00 AM - 11:59 PM PST
  • ExamAttachment Get All Acceptance Test @viralpandya by Friday 12:00 AM - 11:59 PM PST
  • ExamAttachment Delete Acceptance Test @viralpandya by Friday 12:00 AM - 11:59 PM PST

Contribution Rules:

  1. If you have a service task, make sure you commit a failing test, then commit making it pass and so on until your feature is complete (watch this video for reference: https://youtu.be/FLsHIDe3cNs)
  2. All CRUD operations now have similar functionality in the ExamService, Exam and Exam Services, Brokers and Controllers - please follow the same pattern and guidelines.
  3. This WIP Coding Standard https://github.com/hassanhabib/CSharpCodingStandard will be our guidance, it is a work in progress but it should give you a pretty good idea bout how our code should look like from guidelines and standardization standpoint.
  4. Do not start your task before the designated time and make sure you finalize it at the expected time so others can build on top of your work.

If you haven't had an ExamAttachment this week please make sure you engage in discussion for next week so I know you are active in this repo and you are going to be able to contribute to the project.

As soon as all these tasks are done, this issue will be closed.

Thank you all from the bottom of my heart <3 for your contributions, if you are stuck or unsure how to do a task, reach out to me literally on any social media platform you like, LinkedIn, Facebook, Whatsapp, Twitter or even Instagram or just ping me on gitter and I will be sure to response within 2 - 4 hours max.

Teacher Contact

This issue should be just like a teacher contact

public class TeacherContact {
    public Guid ContactId {get; set;}
    public Guid TeacherId {get; set;}
}

The case for many to many here is just simply teachers sharing the same office with the same landline phone number as an option of contact - let's discuss.

Discuss Assignment Model

Hi Everyone,
In this issue, we will be discussing the Assignment model, here's a draft idea of a model:

    class Assignment
    {
        public Guid Id { get; set; }
        public string Label { get; set; }
        public string Content { get; set; }
        public AssignmentStatus Status { get; set; }
        public Guid CourseId { get; set; }
        public Course Course { get; set; }
        public DateTimeOffset Deadline { get; set; }
        public DateTimeOffset CreatedDate { get; set; }
        public DateTimeOffset UpdatedDate { get; set; }
        public Guid CreatedBy { get; set; }
        public Guid UpdatedBy { get; set; }
    }

    enum AssignmentStatus
    {
        Active,
        Closed
    }

Discuss Student Exam Model

We need a data representation of every attempt for a student to take an exam.

An overall model design would contain the following properties:

public class StudentExam : IAuditable 
{
   public Guid Id {get; set;}
   public Guid StudentId {get; set;}
   public Guid ExamId {get; set;}
   public double Score {get; set;}
   public ExamGrade Grade {get; set;}

 ... Audit Fields ...
}

public enum ExamGrade {
APlus,
A,
AMinus,
BPlus,
...
}

Let's discuss.

Discuss Student Guardian Relationship Entity

Hi Everyone,
This is the relationship entity between students and guardians, here's a draft model:

    public class StudentGuardian : IAuditable
    {
        public Guid GuardianId { get; set; }
        public Guid StudentId { get; set; }
        public GuardianStudentRelationship Relationship{ get; set; }
        public DateTimeOffset CreatedDate { get; set; }
        public DateTimeOffset UpdatedDate { get; set; }
        public Guid CreatedBy { get; set; }
        public Guid UpdatedBy { get; set; }
    }

    public enum GuardianStudentRelationship
    {
        Parent,
        Family,
        Other
    }

This will be a composite primary key case, here's an example of how that was done here:

{
modelBuilder.Entity<StudentSemesterCourse>()
.HasKey(studentSemesterCourse =>
new { studentSemesterCourse.StudentId, studentSemesterCourse.SemesterCourseId });

Guardian Contact

Just as we did with students and teachers, let's discuss the Guardian Contact

public class GuardianContact {
    public Guid GuardianContactId {get; set;}
    public Guid GuardianId {get; set;}
}

Teacher Attachments Model

public class TeacherAttachment
{
    public Guid TeacherId {get; set;}
    public Guid AttachmentId {get; set;}
    public Guid Notes {get; set;}
}

Working Demo ?

Hi Hassan,

thanks for your work.

Just Curious to know, Is anywhere this app hosted for a demo, or its just API alone?

thank you

Issue with Tynamix on Unit test

I am working on Unit tests on ShouldDeleteStudentAsync() and i get an error from Tynamix when it ties to Fill a random student. Obviously Tynamix can not fill Student's datetimeoffset:

System.TypeInitializationException : The type initializer for 'System.DateTimeOffset' threw an exception.
---- System.Exception : The type [DateTimeOffset] was not registered in the randomizer.

Calendar with A that got named Calender with E

@hassanhabib I noticed that we write sometimes calendar and sometimes calender and this happens to me too all the time. In the variable declaration it is maybe not important but not beautiful, but saw some occurrences in the namespaces and test method names. Can i fix it for us in an pull request, or how you want to handle issues like this one?

Registration Model

In this sprint we will be developing a registration model - registration could be to join the school or a particular class or activity here's our model:

    public class Registration : IAuditable
    {
        public Guid Id {get; set;}
        public RegistrationStatus Status {get; set;}
        public string SubmitterName {get; set;}
        public string SubmitterPhone {get; set;}
        public string SubmitterEmail {get; set;}
        public string StudentName {get; set;}
        public string StudentPhone {get; set;}
        public string StudentEmail {get; set;}
        public string AdditionalDetails {get; set;}
        public DateTimeOffset CreatedDate {get; set;}
        public DateTimeOffset UpdatedDate {get; set;}
    }
    
    public enum RegistrationStatus 
    {
        Draft,
        Submitted,
        InReview,
        MoreInformationRequired,
        Denied,
        Approved
    }

This task will start Monday 10th of May - Please hit the like button on this issue so I can assign a task to you

Project improvements suggestion

Hello,

First i want to thanks to @hassanhabib for his initiation about project, contributors to this project, and for knowledge that you all are sharing with us

I have some suggestion that i think will improve project architecture.

1. Exceptions dependency

Problem: I think that services (service layer) should not be coupled with exceptions from external library. Ex. "UserService.cs" is dependent on SqlException, DbUpdateException, DuplicateKeyException.... Let say that we want to replace Sql Server provider or EF, we must make correction in all services (in service layer).

Solution: One of the solution will be to create new exceptions for brokers (ex. for StorageBroker - StorageException, StorageUpdateException, StorageDuplicateKeyException ...) that will wrap external exception as inner exception and throw them from broker. Then in the service layer we can catch only broker exceptions. With that we can decouple service layer from external exceptions.

2. Exceptions locations
Will be better to move exceptions to nearby location from where exception is throw? Let say exceptions (ex. NullStudentException, NotFoundStudentException) that will be throw from "UserService.cs", to move to "Services\Users\Exceptions" directory. Same for Brokers. Ex. for "StorageBroker" exceptions (StorageException, StorageUpdateException, StorageDuplicateKeyException ...) to be located in "Brokers\StorageBroker\Exceptions".

3. Brokers naming
I think will be good to name brokers by technology that implement. Let say, storage broker (for sql server) name should be SqlServerStorageBroker.cs. For UserManagment should be IdentityUserManagment ... With this we can replace technology without changing current broker implementation. Also we can support multiple storage brokers (SqliteStorageBroker, MySqlStorageBroker ...).

Attachment Model

This upcoming sprint we want to discuss Attachment model, here's a draft model:

class Attachment 
{
     public Guid {get; set;}
     public string Label {get; set;}
     public string Description {get; set;}
     public byte[] Contents {get; set;}
}

Discuss Exam Model

In this cycle of features we will be working on the following entities:
Exams
Student Exam
Student Grades (Reports)
Calendar
Attachments
There might be some other entities related we will discuss as we go.

public class Exam {
   public Guid Id {get; set;}
   public Guid SemesterId {get; set;}
   public Guid CourseId {get; set;}
   public string Label {get; set;}
   ... Audit Fields 
}

Let's discuss.

Calendar Model Discussion

This week, we are going to build the foundation entity for a calendar - calendars are very common in schooling systems for all involved members, teachers, students, admins and guardians/parents.
We want to offer a pipeline/solution for a community calendar for the entire school plus a personalized calendar entity for each and every individual to fit just their schedules.

the following is just the root entity that's going to be referenced by other calendar entries, here we go:

using System;

namespace OtripleS.Web.Api.Models.Calendars
{
    public class Calendar : IAuditable
    {
        public Guid Id { get; set; }
        public string Label { get; set; }
        public DateTimeOffset CreatedDate { get; set; }
        public DateTimeOffset UpdatedDate { get; set; }
        public Guid CreatedBy { get; set; }
        public Guid UpdatedBy { get; set; }
    }
}

Since this is not a very deep model for discussion I am going to go ahead with the assignments directly as follows:

Setup

  • Calendar Model Setup & Migrations with EF Core @hassanhabib Monday 12:00 AM - 11:59 PM PST [done]

Broker

  • Calendar Broker Insert function @hassanhabib by Tuesday 12:00 AM - 11:59 PM PST [done]
  • Calendar Broker Select All function @hassanhabib by Tuesday 12:00 AM - 11:59 PM PST [done]
  • Calendar Broker Select By Id function @hassanhabib by Tuesday 12:00 AM - 11:59 PM PST [done]
  • Calendar Broker Update function @hassanhabib by Tuesday 12:00 AM - 11:59 PM PST [done]
  • Calendar Broker Delete function @hassanhabib by Tuesday 12:00 AM - 11:59 PM PST [done]

Service

  • Calendar Service Add function @viralpandya by Wednesday 12:00 AM - 11:59 PM PST [done]
  • Calendar Service Retrieve All function @hassanhabib by Wednesday 12:00 AM - 11:59 PM PST [done]
  • Calendar Service Retrieve by Id function @eriadhami by Wednesday 12:00 AM - 11:59 PM PST [done]
  • Calendar Service Modify function @tobidub by Wednesday 12:00 AM - 11:59 PM PST [done]
  • Calendar Service Delete by Id function @stasnowak Wednesday 12:00 AM - 11:59 PM PST

Controller

  • Calendar Controller Post endpoint @Jamaxack by Thursday 12:00 AM - 11:59 PM PST
  • Calendar Controller Get All endpoint @Jamaxackby Thursday 12:00 AM - 11:59 PM PST
  • Calendar Controller Get by Id endpoint @Jamaxackby Thursday 12:00 AM - 11:59 PM PST
  • Calendar Controller Put endpoint @Jamaxackby Thursday 12:00 AM - 11:59 PM PST
  • Calendar Controller Delete endpoint @Jamaxack by Thursday 12:00 AM - 11:59 PM PST

Acceptance Tests

  • Calendar Post Acceptance Test @JaAfghan by Friday 12:00 AM - 11:59 PM PST
  • Calendar Get All Acceptance Test @tajwal by Friday 12:00 AM - 11:59 PM PST
  • Calendar Update Acceptance Test @JaAfghan by Friday 12:00 AM - 11:59 PM PST
  • Calendar Delete Acceptance Test @tajwal

Upgrading to .NET 5 RC

This week we will be upgrading our entire solution to .NET 5 RC and learn about C# 9 EF 5 and all the other features that the technology comes with.
There will be no assignments I will upgrade the solution, your responsibility is:

  1. Make sure you get Visual Studio Preview 2019 version.
  2. Learn about C# 9.0
  3. Ask me if you run into any issues.

Calendar Entry Model Discussion

We need to think of a model to represent an entry in a calendar, here's some high level requirements:

  • It needs to represent a label and a description
  • It might require attaching a file
  • It needs to have a start date and an end date
  • Might need a reminder time (1 day before it occurs for instance)

Let's think together about any other information we might need in a calendar entry.

Student Exam Fee Model

image

Thank you all for your contributions, here's an overview of our StudentExamFee entity model this week:

public class StudentExamFee {
    public Guid ExamFeeId {get; set;}
    public ExamFee ExamFee {get; set;}
    
    public Guid StudentId {get; set;}
    public Student Student {get; set;}
    
    public StudentExamFeeStatus Status {get; set;}
    public DateTimeOffset CreatedDate {get; set;}
    public DateTimeOffset UpdatedDate {get; set;}
    
    public Guid CreatedBy {get; set;}
    public User CreatedByUser {get; set;}
    
    public Guid UpdatedBy {get; set;}
    public User UpdatedByUser {get; set;}
}

public enum StudentExamFeeStatus 
{
    Pending,
    Paid,
    Deferred,
    Waived,
    Cancelled
}

Now, let's talk about StudentExamFees:

Setup

  • StudentExamFee Model Setup & Migrations with EF Core @bilalmehrban Tuesday 12:00 AM - 11:59 PM PST

Broker

  • StudentExamFee Broker Select By Id function @bilalmehrban by Tuesday 12:00 AM - 11:59 PM PST
  • StudentExamFee Broker Select All function @bilalmehrban by Tuesday 12:00 AM - 11:59 PM PST
  • StudentExamFee Broker Insert function @bilalmehrban by Tuesday 12:00 AM - 11:59 PM PST
  • StudentExamFee Broker Delete function @bilalmehrban by Tuesday 12:00 AM - 11:59 PM PST
  • StudentExamFee Broker Update function @bilalmehrban by Tuesday 12:00 AM - 11:59 PM PST

Service

  • StudentExamFee Service Add function @eriadhami by Wednesday 12:00 AM - 11:59 PM PST
  • StudentExamFee Service Retrieve by Id function @tajwal by Wednesday 12:00 AM - 11:59 PM PST
  • StudentExamFee Service Retrieve All function @stasnowak by Wednesday 12:00 AM - 11:59 PM PST
  • StudentExamFee Service Delete by Id function @ZionLloyd05 by Wednesday 12:00 AM - 11:59 PM PST
  • StudentExamFee Service Modify function @viralpandya by Wednesday 12:00 AM - 11:59 PM PST

Controller

  • StudentExamFee Controller Post endpoint @viralpandya by Thursday 12:00 AM - 11:59 PM PST
  • StudentExamFee Controller Get by Id endpoint @viralpandya by Thursday 12:00 AM - 11:59 PM PST
  • StudentExamFee Controller Get All endpoint @viralpandya by Thursday 12:00 AM - 11:59 PM PST
  • StudentExamFee Controller Delete endpoint @viralpandya by Thursday 12:00 AM - 11:59 PM PST
  • StudentExamFee Controller Put endpoint @viralpandya by Thursday 12:00 AM - 11:59 PM PST

Acceptance Tests

  • StudentExamFee Post Acceptance Test @viralpandya by Friday 12:00 AM - 11:59 PM PST
  • StudentExamFee Get All Acceptance Test @viralpandya by Friday 12:00 AM - 11:59 PM PST
  • StudentExamFee Put Acceptance Test @viralpandya by Friday 12:00 AM - 11:59 PM PST
  • StudentExamFee Delete Acceptance Test @viralpandya by Friday 12:00 AM - 11:59 PM PST

Contribution Rules:

  1. Make sure you follow the coding guidelines in the C# Coding Standard
  2. This project follows The Standard - an engineering guideline to incorporate SOLID principles along with code readability and engineering experience as first class citizens.
  3. Please hit the like button on this post so I can consider you for next sprint.

User Contact

Just as we did with students, teachers and guardians let's discuss the User Contact

public class UserContact {
    public Guid UserId {get; set;}
    public User User {get; set;}
    public Guid ContactId {get; set;}
    public Contact Contact {get; set;}
}

Discuss Guardian Model

Hi everyone,
Let's start thinking about the guardian entity model, a guardian for a student can be their parents, grandparents older siblings or other here's a basic model for discussion:

public class Guardian : IAuditable {

    public Guid Id {get; set;}
    public string FirstName {get; set;}
    public string FamilyName {get; set;}
    public GuardianRelationship Relationship {get; set;}
    public DateTimeOffset CreatedDate {get; set;}
    public DateTimeOffset UpdatedDate {get; set;}
    public Guid CreatedBy {get; set;}
    public Guid UpdatedBy {get; set;}
}


public enum GuardianRelationship {
    Parent,
    Sibling,
    Family,
    Other
}

Fees Discussion

Hi everyone,
Let's take this week to discuss registration and exam fees functionality in OtripleS.
For a lot of schools - there are fee processing needed to register into school, monthly or by semester fees.
Let's discuss in general what would that look like in a school system. here's some overall guidelines:

  1. Not all schools require fees
  2. School fees vary based on the entity, there's class fees, exam fees, registration fees and semester fees.
  3. We want our schooling system to be pluggable into any payment processing system - it could integrate directly with a bank account, online payment service or some other system

Looking forward to hearing your thoughts on this.

Discuss Student Model

We need to conceptualize what a foundational student model properties are supposed to have.
Currently I'm thinking of the following:

    public class Student
    {
        public Guid Id { get; set; }
        public string FirstName { get; set; }
        public string MiddleName { get; set; }
        public string LastName { get; set; }
        public DateTimeOffset DateOfBirth { get; set; }
        public DateTimeOffset CreatedDate { get; set; }
        public Guid CreatedBy { get; set; }
        public DateTimeOffset UpdatedDate { get; set; }
        public Guid UpdatedBy { get; set; }
    }

If you think we need to add more or remove some of the aforementioned properties let's discuss, let us know what you think.
The current model will be locked for development by the end of the week on 28th of June 2020

Student Registration Model

This upcoming week, we will be working on the Student Registration Model
This model is just a many to many glue entity to reference a student by id and a registration by id as follows:

public class StudentRegistration 
{
    public Guid StudentId {get; set;}
    public Guid RegisterationId {get; set;}
}

Please hit the like button here so I can assign work to you next week.

Discuss StudentSemesterCourse Model

Hi Everyone,
This is glue entity to build a relationship between Students and SemesterCourses as follows:

    public class StudentSemesterCourse {
        public Guid StudentId {get; set;}
        public Guid SemesterCourse {get; set;}
    }

Exam Fees Model

image

Thank you all for your contributions, here's an overview of our ExamFee entity model this week:

public class ExamFee {
    public Guid Id {get; set;}
    public Guid ExamId {get; set;}
    public Guid FeeId {get; set;}
    public ExamFeeStatus Status {get; set;}
    public DateTimeOffset CreatedDate {get; set;}
    public DateTimeOffset UpdatedDate {get; set;}
    public Guid CreatedBy {get; set;}
    public User CreatedByUser {get; set;}
    public Guid UpdatedBy {get; set;}
    public User UpdatedByUser {get; set;}
}

public enum ExamFeeStatus 
{
    Active,
    Inactive
}

Now, let's talk about ExamFees:

Setup

  • ExamFee Model Setup & Migrations with EF Core @bilalmehrban Tuesday 12:00 AM - 11:59 PM PST

Broker

  • ExamFee Broker Select By Id function @bilalmehrban by Tuesday 12:00 AM - 11:59 PM PST
  • ExamFee Broker Select All function @bilalmehrban by Tuesday 12:00 AM - 11:59 PM PST
  • ExamFee Broker Insert function @bilalmehrban by Tuesday 12:00 AM - 11:59 PM PST
  • ExamFee Broker Delete function @bilalmehrban by Tuesday 12:00 AM - 11:59 PM PST
  • ExamFee Broker Update function @bilalmehrban by Tuesday 12:00 AM - 11:59 PM PST

Service

  • ExamFee Service Add function @eriadhami by Wednesday 12:00 AM - 11:59 PM PST
  • ExamFee Service Retrieve by Id function @tajwal by Wednesday 12:00 AM - 11:59 PM PST
  • ExamFee Service Retrieve All function @stasnowak by Wednesday 12:00 AM - 11:59 PM PST
  • ExamFee Service Delete by Id function @ZionLloyd05 by Wednesday 12:00 AM - 11:59 PM PST
  • ExamFee Service Modify function @viralpandya by Wednesday 12:00 AM - 11:59 PM PST

Controller

  • ExamFee Controller Post endpoint @viralpandya by Thursday 12:00 AM - 11:59 PM PST
  • ExamFee Controller Get by Id endpoint @viralpandya by Thursday 12:00 AM - 11:59 PM PST
  • ExamFee Controller Get All endpoint @viralpandya by Thursday 12:00 AM - 11:59 PM PST
  • ExamFee Controller Delete endpoint @viralpandya by Thursday 12:00 AM - 11:59 PM PST
  • ExamFee Controller Put endpoint @viralpandya by Thursday 12:00 AM - 11:59 PM PST

Acceptance Tests

  • ExamFee Post Acceptance Test @viralpandya by Friday 12:00 AM - 11:59 PM PST
  • ExamFee Get All Acceptance Test @viralpandya by Friday 12:00 AM - 11:59 PM PST
  • ExamFee Put Acceptance Test @viralpandya by Friday 12:00 AM - 11:59 PM PST
  • ExamFee Delete Acceptance Test @viralpandya by Friday 12:00 AM - 11:59 PM PST

Contribution Rules:

  1. If you have a service task, make sure you commit a failing test, then commit making it pass and so on until your feature is complete (watch this video for reference: https://youtu.be/FLsHIDe3cNs)
  2. All CRUD operations now have similar functionality in the ExamService, Exam and Exam Services, Brokers and Controllers - please follow the same pattern and guidelines.
  3. This WIP Coding Standard https://github.com/hassanhabib/CSharpCodingStandard will be our guidance, it is a work in progress but it should give you a pretty good idea bout how our code should look like from guidelines and standardization standpoint.
  4. Do not start your task before the designated time and make sure you finalize it at the expected time so others can build on top of your work.

If you haven't had an ExamFee this week please make sure you engage in discussion for next week so I know you are active in this repo and you are going to be able to contribute to the project.

As soon as all these tasks are done, this issue will be closed.

Thank you all from the bottom of my heart <3 for your contributions, if you are stuck or unsure how to do a task, reach out to me literally on any social media platform you like, LinkedIn, Facebook, Whatsapp, Twitter or even Instagram or just ping me on gitter and I will be sure to response within 2 - 4 hours max.

Discuss Class (Course) Model

This one is going to be a little tricky, because class is a reserved keyword in C# and many other languages - so we probably need to think of a different name for a Class.
Here's the initial model:

using System;

public class Class {
	public Guid Id {get; set;}
	public string Name {get; set;}
	public string Description {get; set;}
	public ClassStatus Status {get; set;}
	public DateTimeOffset CreatedDate {get; set;}
	public DateTimeOffset UpdatedDate {get; set;}
	public Guid CreatedBy {get; set;}
	public Guid UpdatedBy {get; set;}
}

public enum ClassStatus {
	Active,
	Suspended,
	Inactive
}

Related entities to think about:
// students
// teachers
// syllabus
// assignments
// schedules
// projects
// exams

Thanks @viralpandya for helping me put this model together.
Team, let's discuss!

Assignment Attachments Model

Thank you all for your contributions, here's an overview of our AssignmentAttachment entity model this week:

public class AssignmentAttachment {
    public Guid AssignmentId {get; set;}
    public Assignment Assignment {get; set;}
    public Guid AttachmentId {get; set;}
    public Attachment Attachment {get; set;}
    public string Notes {get; set;}
}

Now, let's talk about AssignmentAttachments:

Setup

  • AssignmentAttachment Model Setup & Migrations with EF Core @bilalmehrban Tuesday 12:00 AM - 11:59 PM PST

Broker

  • AssignmentAttachment Broker Select By Id function @bilalmehrban by Tuesday 12:00 AM - 11:59 PM PST
  • AssignmentAttachment Broker Select All function @bilalmehrban by Tuesday 12:00 AM - 11:59 PM PST
  • AssignmentAttachment Broker Insert function @bilalmehrban by Tuesday 12:00 AM - 11:59 PM PST
  • AssignmentAttachment Broker Delete function @bilalmehrban by Tuesday 12:00 AM - 11:59 PM PST

Service

  • AssignmentAttachment Service Add function @eriadhami by Wednesday 12:00 AM - 11:59 PM PST
  • AssignmentAttachment Service Retrieve by Id function @viralpandya by Wednesday 12:00 AM - 11:59 PM PST
  • AssignmentAttachment Service Retrieve All function @stasnowak by Wednesday 12:00 AM - 11:59 PM PST
  • AssignmentAttachment Service Delete by Id function @ZionLloyd05 by Wednesday 12:00 AM - 11:59 PM PST

Controller

  • AssignmentAttachment Controller Post endpoint @viralpandya by Thursday 12:00 AM - 11:59 PM PST
  • AssignmentAttachment Controller Get by Id endpoint @viralpandya by Thursday 12:00 AM - 11:59 PM PST
  • AssignmentAttachment Controller Get All endpoint @viralpandya by Thursday 12:00 AM - 11:59 PM PST
  • AssignmentAttachment Controller Delete endpoint @viralpandya by Thursday 12:00 AM - 11:59 PM PST

Acceptance Tests

  • AssignmentAttachment Post Acceptance Test @viralpandya by Friday 12:00 AM - 11:59 PM PST
  • AssignmentAttachment Get All Acceptance Test @viralpandya by Friday 12:00 AM - 11:59 PM PST
  • AssignmentAttachment Delete Acceptance Test @viralpandya by Friday 12:00 AM - 11:59 PM PST

Contribution Rules:

  1. If you have a service task, make sure you commit a failing test, then commit making it pass and so on until your feature is complete (watch this video for reference: https://youtu.be/FLsHIDe3cNs)
  2. All CRUD operations now have similar functionality in the AssignmentService, Assignment and Assignment Services, Brokers and Controllers - please follow the same pattern and guidelines.
  3. This WIP Coding Standard https://github.com/hassanhabib/CSharpCodingStandard will be our guidance, it is a work in progress but it should give you a pretty good idea bout how our code should look like from guidelines and standardization standpoint.
  4. Do not start your task before the designated time and make sure you finalize it at the expected time so others can build on top of your work.

If you haven't had an AssignmentAttachment this week please make sure you engage in discussion for next week so I know you are active in this repo and you are going to be able to contribute to the project.

As soon as all these tasks are done, this issue will be closed.

Thank you all from the bottom of my heart <3 for your contributions, if you are stuck or unsure how to do a task, reach out to me literally on any social media platform you like, LinkedIn, Facebook, Whatsapp, Twitter or even Instagram or just ping me on gitter and I will be sure to response within 2 - 4 hours max.

Calendar Entry Attachment Model

public class CalendarEntryAttachment
{
    public Guid CalendarEntryId {get; set;}
    public Guid AttachmentId {get; set;}
    public Guid Notes {get; set;}
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.