Loading...
IvaYorgova avatar IvaYorgova 17 Точки

Exam - 25 October 2020 - GIT

Здравейте колеги,

може ли някой да помогне с решението на този изпит:

25 October 2020 - GIT.

Благодаря ви!

Ива

P.S. Каква може да е причината User-а винаги да е logged-out?

 

 

Тагове:
0
C# Web Development Basics
Axiomatik avatar Axiomatik 2422 Точки
Best Answer

If you're using Niki's SUS framework, make sure you have implemented Login/Logout actions in your UsersController.

SignIn() and SignOut() allows you to change the logged status for the given user:

Best,

        public HttpResponse Login()
        {
            if (this.IsUserSignedIn())
            {
                //return this.Redirect("/");
                return this.Redirect("/Home/Home");
            }

            return this.View();
        }

        [HttpPost]
        public HttpResponse Login(LoginInputModel inputModel)
        {
            if (this.IsUserSignedIn())
            {
                return this.Redirect("/");
            }

            var userId = this.usersService.GetUserId(inputModel.Username, inputModel.Password);

            this.SignIn(userId);

            //return this.Redirect("/");
            return this.Redirect("/Home/Home");
        }

        public HttpResponse LogOut()
        {
            if (!this.IsUserSignedIn())
            {
                return this.Redirect("/");
            }

            this.SignOut();

            return this.Redirect("/");
        }

 

0
IvaYorgova avatar IvaYorgova 17 Точки

Много благодаря,

с кода който ми прати се получи!
Вече се логва юзъра.

Само ако имаш възможност можеш

ли да ми пратиш също и кода за RepositoriesController 

и за Views -> Repositories -> All.cshtml (как се правеше

листването на списъка с репозиторита).

Благодаря!

Успешен ден!

Ива

0
Axiomatik avatar Axiomatik 2422 Точки
RepositoriesController:
        public HttpResponse All()
        {
            if (!this.IsUserSignedIn())
            {
                return this.Redirect("/Users/Login");
            }

            var viewModel = this.repositoriesService.GetAllRepositories();

            return this.View(viewModel);
        }


RepositoriesService:
        public ICollection<RepositoryViewModel> GetAllRepositories()
        {
            return this.db.Repositories.Where(x => x.IsPublic).Select(x => new RepositoryViewModel()
            {
                Id = x.Id,
                CommitsCount = x.Commits.Count,
                CreatedOn = x.CreatedOn,
                Name = x.Name,
                Owner = x.Owner.Username
            }).ToList();
        }


All.cshtml:
<div class="container">
    <div class="section">
        <div class="row">
            <div class="col-md-8 offset-md-2">
                <div class="page-header text-center">
                    <h2 id="tables">Public</h2>
                    <p>Repositories</p>
                </div>

                <div class="d-flex justify-content-center">
                    <a class="btn btn-block btn-primary text-white mb-3" href="/Repositories/Create">Create a repository</a>
                </div>

                <div class="component">
                    <table class="table table-hover">
                        <thead>
                            <tr>
                                <th scope="col">Name</th>
                                <th scope="col">Owner</th>
                                <th scope="col">Created On</th>
                                <th scope="col">Commits Count</th>
                                <th scope="col">Commit</th>
                            </tr>
                        </thead>
                        <tbody>
                        @foreach(var item in Model.ToList())
                        {
                            <tr class="table-light">
                                <th scope="row">@item.Name</th>
                                <td>@item.Owner</td>
                                <td>@item.CreatedOn</td>
                                <td>@item.CommitsCount</td>
                                <td>
                                    <a class="btn btn-block btn-primary text-white mb-3" href="/Commits/Create?id=@item.Id">Commit</a>
                                </td>
                            </tr>
                        }
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </div>
</div>

 

0
IvaYorgova avatar IvaYorgova 17 Точки

Thanks!

0
plambet0 avatar plambet0 5 Точки

Някой може ли да качи функционалността за CommitsControllera и съответно сървисите и вютата към него? Благодаря!

0
IvaYorgova avatar IvaYorgova 17 Точки

С голямо закъснение, но чак сега успях да го довърша:

---Commits Controller------------------------------

using Git.Data;
using Git.Data.Models;
using Git.Services;
using Git.ViewModels;
using Git.ViewModels.Commits;
using Git.ViewModels.Users;
using SUS.HTTP;
using SUS.MvcFramework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Git.Controllers
{
    public class CommitsController : Controller
    {
        private readonly ApplicationDbContext data;
        private readonly IUsersService service;

        public CommitsController(ApplicationDbContext data, IUsersService service)
        {
            this.data = data;
            this.service = service;
        }

        public HttpResponse All()
        {
            if (this.IsUserSignedIn())
            {
                var commits = this.data.Commits
                .Where(c => c.CreatorId == this.GetUserId())
                .Select(c => new CommitListingModel
                {
                    Id = c.Id,
                    Repository = c.Repository.Name,
                    Description = c.Description,
                    CreatedOn = c.CreatedOn.ToString(),

                })
                .ToList();

                return this.View(commits);
            }

            return Error("You must sign in first.");
        }

        public HttpResponse Create(string id)
        {
            if (this.IsUserSignedIn())
            {
                var repo = this.data.Repositories
                .Where(r => r.Id == id)
                .Select(r => new CommitToRepoModel
                {
                    Id = r.Id,
                    Name = r.Name
                })
                .FirstOrDefault();

                if (repo == null)
                {
                    return Error("Repository does not exist.");
                }

                return this.View(repo);
            }
            else
            {
                return Error("You must sign in first!");
            }
            
        }

        [HttpPost]
        public HttpResponse Create(CreateCommitsModel model)
        {
            if (!this.data.Repositories.Any(r => r.Id == model.Id))
            {
                return Error("Repository not found.");
            }

            if (model.Description.Length < 5)
            {
                return Error("Commit description have be at least 5 characters.");
            }

            var commit = new Commit
            {
                Description = model.Description,
                CreatedOn = DateTime.UtcNow,
                CreatorId = this.GetUserId(),
                RepositoryId = model.Id
            };

            this.data.Commits.Add(commit);
            this.data.SaveChanges();

            return Redirect("/Repositories/All");
        }

        public HttpResponse Delete(string id)
        {
            var commit = this.data.Commits.Find(id);

            if (commit == null || commit.CreatorId != this.GetUserId())
            {
                return Error("Commit not found.");
            }

            this.data.Commits.Remove(commit);
            this.data.SaveChanges();

            return Redirect("/Commits/All");
        }
    }
}

 

---Commits Views------------------------------

using System;
using System.Collections.Generic;
using System.Text;

namespace Git.ViewModels.Commits
{
    public class CommitListingModel
    {
        public string Id { get; set; }

        public string Repository { get; set; }

        public string Description { get; set; }

        public string CreatedOn { get; set; }
    }
}


---------

using System;
using System.Collections.Generic;
using System.Text;

namespace Git.ViewModels.Commits
{
    public class CommitToRepoModel
    {
        public string  Id { get; set; }

        public string Name { get; set; }
    }
}


-------

using System;
using System.Collections.Generic;
using System.Text;

namespace Git.ViewModels.Commits
{
    public class CreateCommitsModel
    {
        public string Id { get; set; }

        public string Description { get; set; }
    }
}

 

 

 

1
23/06/2021 10:44:26
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.