4.4: Adding User DTOs

We need to think about shaping our data that we send back to the client. When a user requests another user or all users - we don't want to send back password hash/salt, for example.

We'll use DTOs to shape the data and choose what we return in our service.

UserForList

Inside of the User folder in your .Models project - add a new file called UserForList.cs

You can copy and edit the properties from the User.cs class - or type them in manually:

public class UserForList
{
    public int Id { get; set; }

    public string Username { get; set; }

    public string Specialty { get; set; }

    public int Age { get; set; }

    public string KnownAs { get; set; }

    public DateTime Created { get; set; }

    public DateTime LastActive { get; set; }

    public string City { get; set; }

    public string State { get; set; }

    public string PhotoUrl { get; set; }
}

We eliminated some properties that we do not want to return for the list of users.

We changed DateOfBirth to Age - we'll add an extension method to calculate that from their date of birth. We also added a property that doesn't exist on user called PhotoUrl. This will be their "main" photo - that we can find from their Photo collection.

UserForDetail

Next, create another class inside the User folder in your .Models project called UserForDetail.cs:

public class UserForDetail
{
    public int Id { get; set; }

    public string Username { get; set; }

    public string Specialty { get; set; }

    public int Age { get; set; }

    public string KnownAs { get; set; }

    public DateTime Created { get; set; }

    public DateTime LastActive { get; set; }

    public string Introduction { get; set; }

    public string LookingFor { get; set; }

    public string Interests { get; set; }

    public string City { get; set; }

    public string State { get; set; }

    public string PhotoUrl { get; set; }

    public ICollection<PhotoForDetail> Photos { get; set; }
}

We're returning a collection of PhotoForDetails instead of the Photo entities. We'll create that DTO next.

PhotoForDetail

Next, we'll create a DTO to define a Photo we'd like to return.

Create a new folder in your .Models project called Photo and add a new class to it called PhotoForDetail.cs:

public class PhotoForDetail
{
    public int Id { get; set; }

    public string Url { get; set; }

    public string Description { get; set; }

    public DateTime DateAdded { get; set; }

    public bool IsMain { get; set; }
}

Last updated